2016-04-29 65 views
0

我無法弄清楚如何找到我填寫的動態數組的模式。下面是代碼:動態填充數組的VBA工作表功能模式

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.該模式是一種返回最常出現的數字的函數。

回答

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

+0

看來它的工作原理,但我不知道知道爲什麼...我不明白Redim Preserve和測試(UBound(test))= 1行...你能解釋一下嗎? – FabriManga

+0

@FabriManga見編輯。請通過點擊答案中的複選標記來標記爲正確。 –

+0

好吧,我知道了。在Redim Preserve行中,您說要將數組的大小增加1,並在下一行中將第4個元素指定爲1以獲取模式! – FabriManga