VBA: Array komplett in Range schreiben
Schritt-für-Schritt-Anleitung
Um ein Array in einen Excel Range zu schreiben, kannst Du die folgenden Schritte befolgen:
-
Array deklarieren und füllen: Zuerst musst Du ein Array erstellen und mit Werten füllen. Hier ein Beispiel, das die Werte aus Spalte A in ein Array einliest:
Sub TestArray()
Dim arrList() As Variant
Dim i As Integer
Dim k As Integer
With Sheets("Tabelle1")
k = 0
ReDim arrList(0)
For i = 2 To 20
If Application.WorksheetFunction.CountIf(arrList, .Cells(i, 1).Value) = 0 Then
ReDim Preserve arrList(k)
arrList(k) = .Cells(i, 1).Value
k = k + 1
End If
Next i
-
Array in Range schreiben: Um das Array in einen Range zu schreiben, kannst Du den Code wie folgt anpassen:
'Array in Spalte C schreiben
.Range("C2").Resize(UBound(arrList) + 1, 1).Value = Application.Transpose(arrList)
End With
End Sub
Hierbei wird die Funktion Transpose
verwendet, um das Array korrekt in die Zellen zu schreiben.
Häufige Fehler und Lösungen
-
Problem: Das Array wird nicht korrekt in den Range geschrieben, und es erscheint nur der erste Wert.
- Lösung: Achte darauf, dass Du die
Transpose
-Funktion verwendest, um das Array in den vertikalen Range zu übertragen, wie im obigen Beispiel gezeigt.
-
Problem: Redim Preserve
wird nicht benötigt.
- Lösung: Du kannst
Redim Preserve
weglassen, wenn Du sicher bist, dass die Array-Größe vor dem Hinzufügen neuer Werte festgelegt werden kann.
Alternative Methoden
Es gibt verschiedene Möglichkeiten, ein Array in einen Excel Range zu schreiben. Eine gängige Methode ist die Verwendung von VBA Range
direkt:
Sub AlternativeMethode()
Dim Werte(1 To 500) As Variant
Dim i As Integer
For i = 1 To 500
Werte(i) = i
Next i
Range("A1:A500").Value = Application.Transpose(Werte)
End Sub
In diesem Beispiel wird ein Array mit Werten von 1 bis 500 erstellt und dann in den Range A1 bis A500 geschrieben.
Praktische Beispiele
Hier sind einige praktische Beispiele, wie Du vba range to array
und array to range vba
in Deinen Projekten nutzen kannst:
-
Einen Bereich in ein Array einlesen:
Dim myArray As Variant
myArray = Application.Transpose(Range("A1:A10").Value)
-
Ein Array in einen bestimmten Bereich schreiben:
Dim outputArray(1 To 10) As Variant
For i = 1 To 10
outputArray(i) = "Wert " & i
Next i
Range("B1:B10").Value = Application.Transpose(outputArray)
Tipps für Profis
- Nutze
Option Explicit
am Anfang Deiner Module, um sicherzustellen, dass alle Variablen deklariert werden. Das hilft, Fehler zu vermeiden.
- Verwende
Application.Match
, um Duplikate beim Einlesen von Werten in ein Array zu vermeiden.
- Berücksichtige die Verwendung von
UBound
und LBound
, um die Grenzen Deines Arrays dynamisch zu verwalten.
FAQ: Häufige Fragen
1. Wie kann ich ein Array in einen Range in VBA schreiben?
Du kannst ein Array in einen Range schreiben, indem Du die Value
-Eigenschaft des Range-Objekts verwendest und das Array übergibst, idealerweise unter Verwendung von Application.Transpose
.
2. Was ist der Unterschied zwischen Redim
und Redim Preserve
?
Redim
erstellt ein neues Array und verwirft alle vorherigen Werte, während Redim Preserve
die bestehenden Werte beibehält und die Größe des Arrays ändert.
3. Wie kann ich Duplikate aus einem Array entfernen?
Du kannst die Application.Match
-Funktion verwenden, um zu überprüfen, ob ein Wert bereits im Array vorhanden ist, bevor Du ihn hinzufügst.