动态填充数组的VBA WorkSheetFunction.Mode

时间:2016-04-29 15:29:07

标签: vba dynamic-arrays mode

我无法弄清楚如何找到我填写的动态数组的模式。这是代码:

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'因为它就像模式(1,1,2,3)

P.S。该模式是一个返回最常见数字的函数。

1 个答案:

答案 0 :(得分:1)

您正在测试每个数字的模式而不是整个数组。循环后移动功能。

但它不喜欢使用数组和另一个数字。因此,将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放在最后一个空格中。

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