Sub PriceProduct()
Dim aProduct(), aResult(), aFlag()
Dim dLimit As Double
Dim lRw As Long, lNum As Long
Dim k As Long, n As Long, j As Long
lRw = 14 ' последняя строка с товаром'
dLimit = Range("C2").Value ' пороговая сумма'
aProduct = Range("A1:B" & lRw).Value ' товары в массив'
ReDim aResult(1 To lRw, 1 To 5) ' массив для результата'
Randomize
For j = 1 To 5 ' цикл по столбцам (по дням)'
ReDim aFlag(1 To lRw, 1 To 5) ' массив для отметок об использовании'
k = 1 ' первая строка результата - для сумм'
Do
Do
lNum = Int(Rnd * (lRw - 1) + 2) ' случайный номер > 1 (в строке1 шапка таблицы)'
Loop Until Not aFlag(lNum, 1) ' нашли неиспользованный товар'
If aResult(1, j) + aProduct(lNum, 2) <= dLimit Then ' если сумма < пороговой'
k = k + 1
aResult(k, j) = aProduct(lNum, 1) ' записали товар'
aResult(1, j) = aResult(1, j) + aProduct(lNum, 2) ' записали сумму'
aFlag(lNum, 1) = True ' использовано'
Else ' если сумма >= пороговой'
Exit Do ' уходим из цикла (к следующему столбцу)'
End If
Loop Until k = lRw ' все товары использованы, сумма не достигнута - уходим из цикла'
Next j
Range("D2").Resize(UBound(aResult), UBound(aResult, 2)).Value = aResult ' выгружаем результат'
End Sub
随机字母公式,224-255为西里尔字母,小写字母
=СИМВОЛ(СЛУЧМЕЖДУ(224;255))&СИМВОЛ(СЛУЧМЕЖДУ(224;255))&СИМВОЛ(СЛУЧМЕЖДУ(224;255))&СИМВОЛ(СЛУЧМЕЖДУ(224;255))自然
=СЛУЧМЕЖДУ(1;255)返回一个从 1 到 255 的数字粘贴在两列中并向下拖动自动填充
更新:
=ВЫБОР(СЛУЧМЕЖДУ(1; 5); "стул"; "стол"; "кресло"; "чашка"; "торшер")将从列表中随机提供一个项目将宏放在一个公共模块中。