如何对 Excel 中随机选择的“n”个单元格求和?

如何对 Excel 中随机选择的“n”个单元格求和?

使用Excel 2010时,出现以下问题:

我有一列整数(来自二项分布),我将称之为“n”。在第二张表中,我有另一列值(来自成本分析)。现在我想让 Excel 从第 2 张表中随机选取 n 个单元格(n = 给定整数)并将它们相加。

例如 第 1 页,A 列
4
6
7
8
3
4
10
等。

第 2 页;A 列
3452211011223455 12 ... 复制 代码
​ ​




我现在想创建一个列,其中 excel 随机取 4 个(对于第一行)第二张表的不同值(例如 221、455、12 和 223)并自动对它们求和,因此相应的结果应该是 911。对于下一个单元格,Excel 应该对 6 个随机值求和,等等。

这可能吗?

使用 INDEX 函数,我设法告诉 Excel 从工作表 2 中挑选一个随机单元格,或者挑选 5 次相同的单元格(但不是 n 个单元格)并将它们相加。

答案1

考虑以下用户定义函数:

Public Function ransum(HowMany As Long, Population As Range) As Long
    Dim i As Long, N As Long, aray(), r As Range
    N = Population.Count
    ReDim aray(1 To N)

    i = 1
    For Each r In Population
        aray(i) = r.Value
        i = i + 1
    Next r

    Call Shuffle(aray)

    ransum = 0
    For i = 1 To HowMany
        ransum = ransum + aray(i)
    Next i
End Function

Public Sub Shuffle(InOut() As Variant)
    Dim i As Long, J As Long
    Dim tempF As Double, Temp As Variant

    Hi = UBound(InOut)
    Low = LBound(InOut)
    ReDim Helper(Low To Hi) As Double
    Randomize

    For i = Low To Hi
        Helper(i) = Rnd
    Next i


    J = (Hi - Low + 1) \ 2
    Do While J > 0
        For i = Low To Hi - J
          If Helper(i) > Helper(i + J) Then
            tempF = Helper(i)
            Helper(i) = Helper(i + J)
            Helper(i + J) = tempF
            Temp = InOut(i)
            InOut(i) = InOut(i + J)
            InOut(i + J) = Temp
          End If
        Next i
        For i = Hi - J To Low Step -1
          If Helper(i) > Helper(i + J) Then
            tempF = Helper(i)
            Helper(i) = Helper(i + J)
            Helper(i + J) = tempF
            Temp = InOut(i)
            InOut(i) = InOut(i + J)
            InOut(i + J) = Temp
          End If
        Next i
        J = J \ 2
    Loop
End Sub

因此工作表1细胞B1我们进入:

=ransum(A1,Sheet2!A$1:A$100)

并抄下来:

在此处输入图片描述

假设要采样的数据在单元格中A1通过A100第二张纸。

用户定义函数 (UDF) 非常容易安装和使用:

  1. ALT-F11 打开 VBE 窗口
  2. ALT-I ALT-M 打开新模块
  3. 粘贴内容并关闭 VBE 窗口

如果您保存工作簿,UDF 将随之保存。如果您使用的是 2003 之后的 Excel 版本,则必须将文件保存为 .xlsm 而不是 .xlsx

要删除 UDF:

  1. 调出如上所示的 VBE 窗口
  2. 清除代码
  3. 关闭 VBE 窗口

要从 Excel 使用 UDF:

=我的函数(A1)

要了解有关宏的更多信息,请参阅:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

有关 UDF 的详细信息,请参阅:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其工作!

相关内容