2017-11-02 2 views
0

Ich versuche, eine große Menge von Daten (bis zu einer Million Einträge) in ~ 60 Bins für die Verwendung mit einigen Datenanalyse, die schließlich in ein Histogramm eingegeben werden . Das Problem ist, dass wenn ich den Code unten:Index IMMER außerhalb des Bereichs in VBA nach der Verwendung von WorksheetFunction.Frequency

Dim myBinnedData As Variant 
myBinnedData = Application.WorksheetFunction.Frequency(myData,myBins) 

‚hatte ich myBinnedData auf diese Weise Dim becuase ich sonst einen Fehler sagen, es ist nicht

zu einem Array zuweisen können

ich nie myBinnedData zugreifen durch die Verwendung eines Indexes. Die einzige Möglichkeit, die Daten zu erhalten, ist eine For Each-Schleife, aber bevor ich jeden Punkt verarbeiten kann, brauche ich das erste und letzte Element in myBinnedData. Alles funktioniert gut in der For Each-Schleife, aber bei jeder Indizierung (z. B. data = myBinnedData (0)) erhalte ich den Fehler Index Out of Range, unabhängig von der Indexnummer. Ich habe den Typ mit TypeName überprüft und es war Variant().

Die Frage ist also, was ist die richtige Methode zum Indexieren eines Arrays, das von der WorksheetFunction.Frequency-Funktion erstellt wird?

Jede Hilfe wäre willkommen!

+0

Frequenzausgaben scheinen zweidimensional zu sein (1 zu x, 1 zu 1), versuchen 'debug.print myBinnedData (1,1)' – Zerk

+0

Danke! Es hat funktioniert – user2731076

Antwort

2

frequency gibt ein 2-dimensionales Array zurück (aber die 2. Dimension ist, soweit ich sehe, nur von 1 zu 1). Versuchen

Debug.print lbound(myBinnedData, 1), ubound(myBinnedData, 1) 
    Debug.print lbound(myBinnedData, 2), ubound(myBinnedData, 2) 

Die erste Zeile sollte man 1 als untere Grenze geben und die Größe der myBins + 1 als obere Grenze.
Die zweite Zeile gibt Ihnen 1 als untere und obere Grenze. Um Schleife über Ihre Daten verwenden

dim i as integer 
for i = lbound(myBinnedData, 1) to ubound(myBinnedData, 1) 
    Debug.print myBinnedData(i, 1) 
next i 
+0

Vielen Dank für die Antwort. Das hat es geschafft! – user2731076

0

Wie Zerk in den Kommentaren erwähnt, und FunThomas beantwortet, die Frequenz-Funktion gibt eine 2D-Array, so konnte ich indiziert myBinnedData mit (Index 1). Ich dachte, ich hätte das schon ausprobiert, aber ich denke nicht! Danke für die Hilfe!

Ich habe nie die Antwort von Nikolaos versucht, weil ich keine Daten aus meiner Excel-Tabelle aufrufen, ich drucke nur darauf. Die Arrays myData und myBins werden im VBA-Code erstellt.

Verwandte Themen