У меня проблема с VBA Excel.
В столбце F у меня число 57,07%. В этом столбце 102 строки. Идея заключается в генерации случайных значений в процентах, но общее среднее этих случайных чисел должно быть 57,07%.
Мне удалось сгенерировать случайные полные числа. Но когда дело доходит до сложения и удаления десятичных дробей, по какой-то причине я не получаю никаких результатов.
Sub RandomiseSum()
Dim countries As Range, country As Range, pageviews As Range, clicks As Range, impressions As Range, col_f As Range, col_g As Range, col_h As Range, earnings As Range
Dim arr() As Double, i, z, y As Integer
'~~>Count the result of the range of countries
Set countries = Range("B4:B102")
Set pageviews = Range("C4:C102")
Set impressions = Range("D4:D102")
Set clicks = Range("E4:E102")
Set col_f = Range("F4:F102")
Set col_g = Range("G4:G102")
Set col_h = Range("H4:H102")
Set earnings = Range("I4:I102")
ReDim arr(countries.count - 1)
For i = 0 To countries.count - 1
arr(i) = Rnd
Next i
i = i - 1 '~~> Remove 1 from the total cell number in order to put the decimals/diferences in it at the end
'~~> Totals
TotalC = Range("C2").Value
TotalD = Range("D2").Value
TotalE = Range("E2").Value
avg_f = Range("F2").Value
avg_g = Range("G2").Value
avg_h = Range("H2").Value
TotalI = Range("I2").Value
col_h = avg_h
half1 = i / 2
half2 = (i / 2) + 1
z = half2
y = 4
x = 0
Do Until x = half1
this_nr = "H" & y
xnum = WorksheetFunction.RandBetween(0, 42) / 100
Range(this_nr).Value = Range(this_nr).Value - xnum
y = y + 1
z_nr = "H" & z
Range(z_nr).Value = Range(z_nr).Value + xnum
z = z + 1
x = x + 1
Loop
rnr = 0
Do Until rnr = half1
x12 = WorksheetFunction.RandBetween(4, 102)
x22 = WorksheetFunction.RandBetween(4, 102)
x12 = "H" & x12
x22 = "H" & x22
x3 = x12
Range(x12).Value = Range(x22).Value
Range(x22).Value = Range(x3).Value
rnr = rnr + 1
Loop
y = 4
z = half2
For x = 0 To x = half1
this_nr = "H" & y
z_nr = "H" & z
Range(this_nr).Value = Range(this_nr).Value - 0.3
Range(z_nr).Value = Range(z_nr).Value + 0.03
z = z + 1
x = x + 1
Next x
End Sub
Как вы можете видеть на рисунке, я получаю значение .07 во всех ячейках, но я не могу удалить это значение из некоторых ячеек и добавить его к другим.
Есть идеи?
Мой цикл неверный?
решение1
Мне удалось решить эту проблему. Если кто-то еще столкнется с такой же проблемой, вот код. Я добавил еще одну переменную с именем "xnum2", где я бы генерировал случайное десятичное число, а затем для каждого цикла я бы удалял это значение из CELLx.value и добавлял бы его к другому CELLy.value, так что среднее значение все равно было бы тем же.
col_h = avg_h
half1 = i / 2
half2 = (i / 2) + 1
z = half2
y = 4
x = 0
Do Until x = half1
this_nr = "H" & y
xnum = WorksheetFunction.RandBetween(0, 42) / 100
Range(this_nr).Value = Range(this_nr).Value - xnum
xnum2 = WorksheetFunction.RandBetween(0, 9) / 10000
Range(this_nr).Value = Range(this_nr).Value - xnum2
y = y + 1
z_nr = "H" & z
Range(z_nr).Value = Range(z_nr).Value + xnum
Range(z_nr).Value = Range(z_nr).Value + xnum2
z = z + 1
x = x + 1
Loop
rnr = 0
Do Until rnr = half1
x12 = WorksheetFunction.RandBetween(4, 102)
x22 = WorksheetFunction.RandBetween(4, 102)
x12 = "H" & x12
x22 = "H" & x22
x3 = x12
Range(x12).Value = Range(x22).Value
Range(x22).Value = Range(x3).Value
rnr = rnr + 1
Loop