Array kopieren und Werte in ein anderes Array einsetzen
Schritt-für-Schritt-Anleitung
Um Werte aus einer Zeile in eine andere zu übertragen, kannst du den folgenden VBA-Code verwenden. Dieser Code kopiert Formeln von einer Zeile und ersetzt sie durch die entsprechenden Werte in der Zielzeile.
Dim SpaltenArr As Variant, i As Integer, Zeile As Long
Zeile = 111 ' Zeile mit Formeln
SpaltenArr = Array(57, 104, 153, 168, 200, 231) ' Spaltennummern der jeweiligen Bereiche
Application.EnableEvents = False
' Formeln kopieren
For i = LBound(SpaltenArr) To UBound(SpaltenArr) Step 2
Range(Cells(Zeile, SpaltenArr(i)), Cells(Zeile, SpaltenArr(i + 1))).Copy
Range(Cells(Target.Row, SpaltenArr(i)), Cells(Target.Row, SpaltenArr(i + 1))).PasteSpecial Paste:=xlPasteFormulas
Next
Application.CutCopyMode = False
Application.EnableEvents = True
' Neuberechnen und Werte statt Formeln
For i = LBound(SpaltenArr) To UBound(SpaltenArr) Step 2
With Range(Cells(Target.Row, SpaltenArr(i)), Cells(Target.Row, SpaltenArr(i + 1)))
.Calculate
.Value = .Value
End With
Next
Dieser Code funktioniert in Excel VBA und ermöglicht es dir, Formeln in einer Zeile zu kopieren und die berechneten Werte in eine andere Zeile einzusetzen.
Häufige Fehler und Lösungen
-
Fehler: "Anwendungsfehler"
- Lösung: Überprüfe, ob der Zielbereich korrekt definiert ist und dass die Zielzeile existiert.
-
Fehler: "Zugriff auf das Objekt nicht möglich"
- Lösung: Stelle sicher, dass die
Target
-Variable korrekt referenziert wird und nicht auf eine leere oder ungültige Zeile zeigt.
-
Fehler: Formeln werden nicht korrekt kopiert
- Lösung: Überprüfe die Spaltennummern im
SpaltenArr
, um sicherzustellen, dass sie den gewünschten Bereichen entsprechen.
Alternative Methoden
Eine alternative Methode ist die Verwendung der Value
-Eigenschaft direkt, ohne die Formeln zu kopieren. Hier ein einfacher Ansatz:
Dim Zeile As Long
Zeile = 111 ' Zeile mit Formeln
Range(Cells(Target.Row, 57), Cells(Target.Row, 104)).Value = Range(Cells(Zeile, 57), Cells(Zeile, 104)).Value
Diese Methode ist schneller, wenn du nur die Werte übertragen möchtest, ohne den Umweg über die Formeln zu gehen.
Praktische Beispiele
Hier sind zwei praktische Beispiele, wie du den Code anpassen kannst:
-
Übertragen von drei Bereichen:
- Ersetze die
SpaltenArr
-Definition mit den Spaltennummern, die du benötigst.
-
Einfügen von Werten in eine benannte Zielzeile:
- Wenn du eine benannte Zielzeile hast, kannst du
Target.Row
durch den Namen der Zeile ersetzen, z.B. Range("ZielZeile").Row
.
Tipps für Profis
- Verwende
Application.ScreenUpdating = False
, um die Bildschirmaktualisierung während des Kopiervorgangs zu deaktivieren. Das verbessert die Performance.
- Füge Error-Handling hinzu, um unerwartete Fehler während der Ausführung zu vermeiden. Zum Beispiel:
On Error GoTo Fehlerbehandlung
' Dein Code hier
Exit Sub
Fehlerbehandlung:
MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
FAQ: Häufige Fragen
1. Wie kann ich sicherstellen, dass die Zielzeile immer existiert?
Du kannst eine einfache Überprüfung hinzufügen, um sicherzustellen, dass die Zeile nicht außerhalb des gültigen Bereichs liegt.
2. Funktioniert der Code in Excel 2016 und späteren Versionen?
Ja, der vorgestellte VBA-Code sollte in Excel 2016 und neueren Versionen ohne Probleme funktionieren.