2016-04-29 17 views
0

Ich kann nicht herausfinden, wie Sie den Modus eines dynamischen Array finden, die ich ausfülle. Hier ist der Code:VBA WorkSheetFunction.Mode eines dynamisch bevölkertes 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

Ich weiß nicht, wie die Mode-Funktion zu sagen, den Array-Wert als eine Zahl zu verarbeiten. In diesem Beispiel wird der Modus gezwungen, 1 zu sein, weil es wie Mode (1,1,2,3)

P.S. Der Modus ist eine Funktion, die die häufigste Zahl zurückgibt.

Antwort

1

Sie testen den Modus jeder Nummer einzeln nicht das gesamte Array. Verschieben Sie die Funktion nach der Schleife.

Aber es wird nicht die Verwendung eines Arrays und einer anderen Nummer mögen. So fügen Sie die 1 bis zum Ende des Arrays und verwenden Sie dann das Array im Modus

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 

Zuerst füllen wir den Standard-Array. Und um das zusätzliche 1 in das Array hinzuzufügen, weil die MODE-Funktion ein Array und eine einzelne Variable nicht mag.

Die ReDim Preserve test(1 To UBound(test) + 1) findet die obere Grenze des Testarrays. In diesem Fall wäre es 3. Sie fügen dann eine weitere Box hinzu, in die wir eine ganze Zahl einfügen können.

Jetzt ist die obere Grenze 4 und wir verwenden test(UBound(test)) = 1, um 1 in den letzten Raum zu setzen.

Dies ist ein Weg, um sicherzustellen, dass, egal wie groß oder klein das Array es immer ist, wird ein weiteres Feld in das Array hinzufügen und in diesem Feld die 1.

+0

setzen Es scheint, es funktioniert, aber ich weiß nicht weiß warum ... Ich verstehe nicht die Redim Preserve und den Test (UBound (Test)) = 1 Zeilen ... Könnten Sie es erklären? – FabriManga

+0

@FabriManga siehe Bearbeiten. Bitte markieren Sie als korrekt, indem Sie auf das Häkchen in der Antwort klicken. –

+0

OK, ich habe es geschafft. In der Zeile "Redim Preserve" sagst du, dass du die Größe des Arrays um 1 erhöhen musst und in der nächsten Reihe das vierte Element 1 zuweisen musst, um den Modus zu erhalten! – FabriManga