如何创建一个分配值的宏?

如何创建一个分配值的宏?

我如何创建一个宏,取第 33 周(AG5)的值为 24,并将其以 10 周为间隔,在它之前的 13 周(基本上是第 11-20 周)分布在其下方的行中,尽可能均匀地以整数形式分布?

参见此处的示例

答案1

这是一个分布公式无需 VBA

将要分配的数字放入单元格中AG5 (24). 在单元格中输入要填充的单元格数量AG4 (10)

选择一些单元格,说AB6并输入:

=ROUND(COLUMNS($A:A)/$AG$4*$AG$5,0)

AC6进入:

 =IF(COLUMNS($A:B)<=$AG$4,ROUND(COLUMNS($A:B)/$AG$4*$AG$5,0)-SUM($AB6:AB6),"")

并复制:

在此处输入图片描述

该公式很好地分配了数字。如果您确实需要 VBA,可以使用宏来粘贴公式。

编辑#1:

如果需要 VBA,那么尝试这个小型 UDF:

选项明确

Public Function distribute(Amount As Long, CellCount As Long)
    Dim temp, i As Long, factor As Double
    Dim wf As WorksheetFunction, zum As Long
    ReDim temp(1 To 1, 1 To CellCount)
    Set wf = Application.WorksheetFunction
    zum = 0

    For i = 1 To CellCount
        If i = 1 Then
            temp(1, i) = wf.Round(i / CellCount * Amount, 0)
            zum = temp(1, i)
        Else
            temp(1, i) = wf.Round(i / CellCount * Amount, 0) - zum
            zum = zum + temp(1, i)
        End If
    Next i
    distribute = temp
End Function

此 UDF 返回大批,因此除非您使用的是 Excel 365,否则它应该是数组输入。

相关内容