在Excel中检索模式阵列的值

时间:2017-09-15 16:35:50

标签: arrays excel vba

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

为了克服这个问题,我们拆分模式数组以检查单个列的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. E.g. 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中检索信息不起作用,其类型为Variant()

我们如何获取模式的实际值,以便我们可以在另一个表中报告它们?我知道我可以直接在工作表中放入数组函数,但是我想避免在下游处理“N / A”值,而且我没有办法确定模式数组的长度。一个功能。

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

编辑:

我应该注意,如果只有一个模式,上面的脚本将会起作用,如果有多个模式则会出现问题。

1 个答案:

答案 0 :(得分:1)

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

这对于cols A&amp; A中的数千个数字(稍慢)有效。乙