Array in Excel-Bereich
Ich bin neu in VBA und versuche zu schreiben, der ein array zu einem excel-Bereich durch ein array UDF.
Ich versuche die Ausgabe des array auf eine maximale Anzahl von Zeilen, die die Formel wurde platziert. Ich bin mit der Microsoft Scripting Bibliothek für das Wörterbuch, wenn diese Angelegenheiten.
Mit einer array-Formel in excel (STRG+Shift+Enter), wie kann ich die Größe meines Arrays auf den Bereich, der die Formel wurde platziert und dann das array in die Zellen?
Ich möchte die Formel in der Zelle =test("G1:J20") und die Formel wird in die Zellen A1:B20.
Code:
Function test(ByVal inputRange As Range) As Variant
Dim Cell As Variant
Dim D As Dictionary
Dim Arr() As Variant
Dim i As Long
Set D = New Dictionary
' Remove duplicates
For Each Cell In inputRange
If D.Exists(CStr(Cell.Value)) = False Then
D.Add CStr(Cell.Value), 1
Else
D.Exists (Cell.Value)
D.Item(Cell.Value) = D.Item(Cell.Value) + 1
End If
Next
D.Remove vbNullString
Redim Arr(0 To Application.Max(D.Count, Application.Caller.Cells.Count))
'Fill the array with the keys from the Dictionary
For i = 0 To D.Count - 1
Arr(i) = D.Keys(i)
Next i
test = Application.Transpose(Arr)
End Function
- Wenn Sie
ReDim
ein array ohne VerwendungPreserve
dann verlieren Sie den Inhalt, aber in jedem Fall, dass Sie ReDim kann nur die Letzte dimension eines 2-D array... Versuchen Sie den Aufruf der Funktion aus einer test-Sub leichter zu Debuggen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Lesen und schreiben von arrays zu den Zellen benötigen Sie ein 2D-array. Zum Beispiel:
Oder einfach nur zum Lesen von Werten
Range.Resize()
undRange.Offset()
Befehle wählen Sie den Bereich von Zellen benötigt.Hier ist eine Methode, um ein array in ein Arbeitsblatt-Bereich, ist es das, was du meintest?
Jedoch, da Sie bereits Durchlaufen Wörterbuch für die Werte, warum nicht, schreiben Sie die Werte direkt in das Arbeitsblatt? Sie können nachahmen, das transponieren, das austauschen Ihrer Zeilen-und spaltenindexpositionen