Dynamische Arrays in Excel VBA: Ein Leitfaden für Anfänger
Schritt-für-Schritt-Anleitung
Um ein einfaches VBA-Skript zu erstellen, das mit dynamischen Arrays und der If-Then
-Anweisung arbeitet, folge diesen Schritten:
- Öffne Excel und drücke
ALT + F11
, um den VBA-Editor zu öffnen.
- Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject (DeineDatei)" klickst und "Einfügen" > "Modul" auswählst.
- Kopiere den folgenden Code in das Modul:
Sub WertderVorperiodekorrigieren()
Dim size As Integer
Dim i As Integer
Dim Wert_Vorperiode() As Variant
' Anzahl der Einträge in Spalte AA ermitteln
size = WorksheetFunction.CountA(Worksheets("Datenbank-WGM").Columns(27))
' Größe des Arrays festlegen
ReDim Wert_Vorperiode(size - 1)
' Wenn in Spalte Z "Angebotspreis" steht, wird der Wert in Spalte Q neu berechnet
For i = 1 To size
If Cells(i, 26).Value = "Angebotspreis" Then
Wert_Vorperiode(i - 1) = (Cells(i, 19).Value - Cells(i, 20).Value)
Else
Wert_Vorperiode(i - 1) = Cells(i, 17).Value
End If
Next i
' Rückschreiben in die Zellen (Optional)
For i = 1 To size
Cells(i, 17).Value = Wert_Vorperiode(i - 1)
Next i
End Sub
- Schließe den VBA-Editor und kehre zu Excel zurück.
- Führe das Makro aus, indem du
ALT + F8
drückst, das Makro auswählst und auf "Ausführen" klickst.
Häufige Fehler und Lösungen
- Laufzeitfehler: Überprüfe, ob der Index des Arrays korrekt ist. Wenn du ein eindimensionales Array verwendest, sollte der Index
i - 1
sein, da VBA-Arrays standardmäßig bei 0 beginnen.
- Falsche Verwendung von Zellen: Stelle sicher, dass die Zellenreferenzen korrekt sind. Wenn du
Cells(i, 17)
verwendest, beziehe dich auf die richtige Spalte.
- Arrays nicht dimensioniert: Achte darauf, dass das Array mit der richtigen Anzahl an Elementen dimensioniert wird, bevor du darauf zugreifst.
Alternative Methoden
Wenn du keine Arrays verwenden möchtest, kannst du die Berechnung auch direkt in den Zellen durchführen. Hier ist ein Beispiel:
Sub BerechnungOhneArray()
Dim i As Integer
Dim intLZ As Integer
With Sheets("Tabelle1")
intLZ = .Cells(Rows.Count, 19).End(xlUp).Row
For i = 2 To intLZ
If .Cells(i, 26).Value = "Angebotspreis" Then
.Cells(i, 17).Value = .Cells(i, 19).Value - .Cells(i, 20).Value
End If
Next i
End With
End Sub
Diese Methode ist einfacher und benötigt kein Array.
Praktische Beispiele
Hier sind einige Beispiele, wie du If-Then
-Anweisungen und Arrays kombinieren kannst:
- Berechnung mit Arrays:
- Wenn du mehrere Bedingungen prüfen möchtest, kannst du die
If-Then
-Anweisung erweitern:
If Cells(i, 26).Value = "Angebotspreis" And Cells(i, 19).Value > Cells(i, 20).Value Then
Wert_Vorperiode(i - 1) = (Cells(i, 19).Value - Cells(i, 20).Value)
End If
- Nutzung von mehrdimensionalen Arrays:
- Um ein mehrdimensionales Array zu verwenden, könntest du den Code wie folgt anpassen:
ReDim Wert_Vorperiode(size - 1, 1)
Tipps für Profis
- Vermeide unnötige
Cells
-Zugriffe: Speichere Werte in einem Array, um die Leistung zu verbessern, insbesondere bei großen Datenmengen.
- Nutze
Option Explicit
: Dies hilft dir, Variablen zu deklarieren und Fehler zu vermeiden.
- Transponiere bei Bedarf: Wenn dein Array mehrdimensional ist, denke daran, es zu transponieren, bevor du es zurückschreibst.
FAQ: Häufige Fragen
1. Was ist der Vorteil von Arrays in VBA?
Arrays ermöglichen eine effizientere Verarbeitung von Daten, da sie den Zugriff auf Zellwerte minimieren und die Leistung verbessern.
2. Wie dimensioniere ich ein Array richtig?
Verwende ReDim
und achte darauf, die Größe des Arrays korrekt festzulegen, z.B. ReDim myArray(1 To size)
.
3. Kann ich If-Then
-Anweisungen in Arrays verwenden?
Ja, du kannst If-Then
-Anweisungen verwenden, um Bedingungen zu überprüfen, während du durch die Elemente eines Arrays iterierst.