
Option Explicit
Sub Pulsante1_Click()
Dim rng As Range, max_value As Long, cell As Range
Dim d As Single
Set rng = Range("B2:B14")
max_value = Application.Max(rng)
For Each cell In rng
d = cell / max_value
cell.Offset(, 1) = d
Next
Randomize Timer
Do
For Each cell In rng.Offset(, 1)
cell = Rnd(1) * 1
Next
Loop Until Range("C16") - Range("B15") < 1# And Range("B16") - Range("C16") < 1#
MsgBox "Finito"
End Sub |
Option Explicit
Sub Pulsante1_Click()
Dim cell As Range
Randomize Timer
Do
For Each cell In Range("C2:C14")
cell = Rnd(1) * 1
Next
Loop Until Range("C16") >= Range("B15") And Range("C16") <= Range("B16")
MsgBox "Finito"
End Sub |
|
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
Sub Pulsante1_Click()
Dim ws As Worksheet
Dim rngMin As Range
Dim rngMax As Range
Dim rngVal As Range
Dim rngPesi As Range
Dim rngTarget As Range
Dim nPeso As Double
Dim nOb As Double
Dim j As Long
Dim k As Long
Set ws = ActiveSheet
Set rngVal = ws.Range("B2:B14")
Set rngPesi = ws.Range("C2:C14")
Set rngTarget = ws.Range("C16")
nOb = Round(ws.Range("B16").Value, 3)
With Application.WorksheetFunction
Set rngMin = rngVal.Cells(.Match(.Small(rngVal, 1), rngVal, 0), 1)
Set rngMax = rngVal.Cells(.Match(.Large(rngVal, 1), rngVal, 0), 1)
rngPesi.Value = Round(1 / rngPesi.Rows.Count, 6)
nPeso = Round(.Sum(rngPesi), 5)
End With
j = 0
Do While Round(rngTarget.Value, 2) <> nOb And j <= rngPesi.Rows.Count
If Round(rngTarget.Value, 2) > nOb Then
With rngMax.Offset(0, 1)
If .Value > 0.0001 And rngMin.Offset(0, 1).Value < 0.9999 Then
.Value = .Value - 0.0001
rngMin.Offset(0, 1).Value = rngMin.Offset(0, 1).Value + 0.0001
Else
j = j + 1
With Application.WorksheetFunction
Set rngMin = rngVal.Cells(.Match(.Small(rngVal, j), rngVal, 0), 1)
Set rngMax = rngVal.Cells(.Match(.Large(rngVal, j), rngVal, 0), 1)
End With
End If
End With
Else
With rngMax.Offset(0, 1)
If .Value < 0.9999 And rngMin.Offset(0, 1).Value > 0.0002 Then
.Value = .Value + 0.0001
rngMin.Offset(0, 1).Value = rngMin.Offset(0, 1).Value - 0.0001
Else
j = j + 1
With Application.WorksheetFunction
Set rngMin = rngVal.Cells(.Match(.Small(rngVal, j), rngVal, 0), 1)
Set rngMax = rngVal.Cells(.Match(.Large(rngVal, j), rngVal, 0), 1)
End With
End If
End With
End If
Loop
If Round(rngTarget.Value, 2) = nOb Then MsgBox "Bingo!" Else MsgBox "Failed!"
Set rngPesi = Nothing
Set rngTarget = Nothing
Set rngOb = Nothing
End Sub
|
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
Sub Pulsante1_Click()
Dim ws As Worksheet
Dim rngMin As Range
Dim rngMax As Range
Dim rngVal As Range
Dim rngPesi As Range
Dim rngTarget As Range
Dim nPeso As Double
Dim nOb As Double
Dim j As Long
Dim nRows As Long
Dim nRand As Single
Dim nDummy
Set ws = ActiveSheet
Set rngVal = ws.Range("B2:B14")
Set rngPesi = ws.Range("C2:C14")
Set rngTarget = ws.Range("C16")
nOb = Round(ws.Range("B16").Value, 4)
nRows = rngPesi.Rows.Count
With Application.WorksheetFunction
Set rngMin = rngVal.Cells(.Match(.Small(rngVal, 1), rngVal, 0), 1)
Set rngMax = rngVal.Cells(.Match(.Large(rngVal, 1), rngVal, 0), 1)
rngPesi.Value = Round(1 / nRows, 6)
nPeso = Round(.Sum(rngPesi), 5)
End With
For j = 1 To Int(nRows / 2)
Randomize Timer
nRand = Application.RandBetween(5, 10) / 100 + Rnd() / 1000
nDummy = rngPesi.Offset(Int(nRows / 2), 0).Cells(1, 1).Value
If Abs(nDummy + (rngPesi(j, 1).Value - nRand)) < 1 And Abs(nDummy + (rngPesi(j, 1).Value - nRand)) > 0 Then
rngPesi.Offset(Int(nRows / 2) + j, 0).Cells(1, 1).Value = nDummy + (rngPesi(j, 1).Value - nRand)
rngPesi(j, 1) = nRand
End If
Next
j = 0
Do While Round(rngTarget.Value, 4) <> nOb And j <= nRows
If Round(rngTarget.Value, 2) > nOb Then
With rngMax.Offset(0, 1)
If .Value > 0.000001 And rngMin.Offset(0, 1).Value < 0.999999 Then
.Value = .Value - 0.000001
rngMin.Offset(0, 1).Value = rngMin.Offset(0, 1).Value + 0.000001
Else
j = j + 1
With Application.WorksheetFunction
Set rngMin = rngVal.Cells(.Match(.Small(rngVal, j), rngVal, 0), 1)
Set rngMax = rngVal.Cells(.Match(.Large(rngVal, j), rngVal, 0), 1)
End With
End If
End With
Else
With rngMax.Offset(0, 1)
If .Value < 0.999999 And rngMin.Offset(0, 1).Value > 0.000001 Then
.Value = .Value + 0.000001
rngMin.Offset(0, 1).Value = rngMin.Offset(0, 1).Value - 0.000001
Else
j = j + 1
With Application.WorksheetFunction
Set rngMin = rngVal.Cells(.Match(.Small(rngVal, j), rngVal, 0), 1)
Set rngMax = rngVal.Cells(.Match(.Large(rngVal, j), rngVal, 0), 1)
End With
End If
End With
End If
Loop
If Round(rngTarget.Value, 4) = nOb Then MsgBox "Bingo!" Else MsgBox "Failed!"
Set rngPesi = Nothing
Set rngTarget = Nothing
Set rngOb = Nothing
End Sub
|
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
| scossa's web site |
| Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw) |
