VBA WorkSheetFunction.Mode 动态填充数组

VBA WorkSheetFunction.Mode of a Dynamic Populated Array

我不知道如何找到我填写的动态数组的模式。这是代码:

Sub test_array()

Dim test() As Integer
Dim i As Integer

For i = 1 To 3
ReDim Preserve test(i)
test(i) = i
Mode = Application.WorksheetFunction.Mode(test(i), 1)
Next i

End Sub

我不知道如何告诉模式函数将数组值作为数字处理。在这个例子中,模式被强制为 1 ''因为它会像 Mode(1,1,2,3)

P.S。该模式是一个函数,表示 returns 最经常出现的数字。

您正在单独测试每个数字的模式,而不是整个数组。在循环之后移动函数。

但它不会喜欢使用一个数组和另一个数字。所以将1添加到数组的末尾,然后在模式

中使用数组
Sub foo()


Dim test() As Integer
Dim i As Integer
Dim md As Integer

ReDim test(1 To 3) As Integer

For i = 1 To 3
    test(i) = i
Next i

ReDim Preserve test(1 To UBound(test) + 1)
test(UBound(test)) = 1

md = Application.WorksheetFunction.Mode(test)

MsgBox md
End Sub

首先我们填充标准数组。并将额外的1添加到数组中,因为MODE函数不喜欢数组和单个变量。

ReDim Preserve test(1 To UBound(test) + 1) 找到测试数组的上限。在本例中为 3。然后再添加一个框,我们可以在其中添加一个整数。

所以现在上限是4,我们用test(UBound(test)) = 1把1放在最后一个space。

这是一种确保无论数组有多大或多小,它总是会在数组中再添加一个框并在该框内放入 1 的方法。