在Excel中检索模式数组的值

我们有一些有数千个数字的电子表格,我们希望返回模式数组。 MODE.MULT只能处理254个数字。

试图克服这一点,我们分开模式arrays检查单列的252个单元格。 然后,我们将从这些数字中检查模式(理解这增加了一定程度的错误,但是考虑到设置的大小,我们认为它是小的)。

这导致我们为模式函数分配一个锯齿状的数组,但是我们在检索其中的值时遇到了问题:

Dim ModeArray() As Variant 'Also tried ModeArray as not an array of variants but that left the same errors Dim RowSet As Integer RowSet = 2 Dim rr As Range For n = 2 To 252 Set rr = Sheet5.Range(Sheet5.Cells(7, n), Sheet5.Cells(260, n)) If Application.WorksheetFunction.CountBlank(rr) < 253 Then 'Needed because a 1004 error will pop if there are no numbers in a particular column ModeArray = Application.WorksheetFunction.Mode_Mult(rr) For i = 1 To UBound(ModeArray) Sheet5.Cells(RowSet, n).Value = ModeArray(i) 'We get a few different errors. Eg sub script out of range errors or if (1)(1) is tested "Object doesn't support this property or method (Error 438)" even though the TypeName(ModeArray(i)) is Double RowSet = 1 + RowSet Next RowSet = 2 End If Next 

我们只希望每列有2-3个模式,但给了5个空间。然而,这不是我们的问题。 尝试从ModeArray中检索信息不起作用,它的types是Variant()

我们怎样才能得到模式的实际价值,所以我们可以在另一个表中报告呢? 我知道我可以直接在工作表中放入数组函数,但我想避免处理“N / A”值下游,我没有办法确定模式数组的长度一个function。

或者,有没有办法一起跳过这一切,并检索一个非常大的数据集的模式?


编辑:

我应该注意到,如果只有一个模式,上面的脚本将工作,如果有多个模式,这是一个问题。

MODE.MULT可以在每个参数中处理超过254个数字 – 它的限制是它不能处理超过254个不同的参数。

 Sub modes() Dim modearray As Variant Dim j As Long modearray = Application.WorksheetFunction.Mode_Mult(Range("Sheet1!A:B")) If UBound(modearray) = 1 Then Debug.Print modearray(1) Else For j = LBound(modearray) To UBound(modearray) Debug.Print modearray(j, 1) Next j End If End Sub 

这对A和B列数千个数字有效(有点慢)