Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Array kopieren u. Werte in anderes Array einsetzen

Array kopieren u. Werte in anderes Array einsetzen
11.02.2007 19:49:27
Lorenz
Hallo zusammen!
Problem: lt untenstehenden CODE sollte aus den 3 Bereichen die Formel aus Zeile 111 in TargetZeile der Wert übertragen werden. Das tuts aber nicht!Leider!
Dim StatArr As Variant, RngArr As Variant
StatArr = Array(Range(Cells(111, 57), Cells(111, 104)), Range(Cells(111, 153), Cells(111, 168)), Range(Cells(111, 200), Cells(111, 231))).FormulaR1C1
RngArr = Array(Range(Cells(Target.Row, 57), Cells(Target.Row, 104)), Range(Cells(Target.Row, 153), Cells(Target.Row, 168)), Range(Cells(Target.Row, 200), Cells(Target.Row, 231)))
With RngArr
.Calculate
.Value = .Value
End With
Wie gehört der CODE geändert, daß dies geschieht?
Danke im Voraus
Lorenz
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Array kopieren u. Werte in anderes Array einse
11.02.2007 21:19:59
fcs
Hallo Lorenz,
mit der Array-Konstruktion funktioniert es meiner Meinung (meines Wissens) nicht.
Formeln und Werte lassen sich nur über entsprechende Range-Objekte zuweisen.
Mir ist allerdings nicht ganz klar ob du
jeweils in Zeile 111 Werte per Formel berechnest, deren Ergebnisse dann in die Target-Zeile übertragen werden sollen
oder
die Formeln aus Zeile 111 in die Target-Zeile kopieren willst, dann neu berechnest und zum Schluss die Formeln in der Target-Zeile durch ihre Werte ersetzen möchtest.
Nachfolgende Code-Beispiele für beide Varianten
Gruss
Franz

Beispiel Zeile 111 neu berechnen, dann Werte nach targetzeile übertragen
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
'Zeile 111 neuberechne
ActiveSheet.Rows(Zeile).Calculate
'Werte von Zeile 111 in Target-Zeile übertragen
For i = LBound(SpaltenArr) To UBound(SpaltenArr) Step 2
Range(Cells(Target.Row, SpaltenArr(i)), Cells(Target.Row, SpaltenArr(i + 1))).Value = _
Range(Cells(Zeile, SpaltenArr(i)), Cells(Zeile, SpaltenArr(i + 1))).Value
Next
Beispiel Formeln Kopieren, dann durch Werte ersetzen
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

Anzeige
AW: Array kopieren u. Werte in anderes Array einse
11.02.2007 21:40:06
Lorenz
Hallo Franz!
Beispiel Formeln Kopieren, dann durch Werte ersetzen war gemeint!
Code kopiert, Kleinigkeit angepasst (nur um 3 weitere Bereiche ergänzt), eingesetzt und hat sofort suuuuuuuuuuuuuuper funktioniert!!!!!!
Danke vielmals und Grüsse aus Österreich: Lorenz
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

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

  1. Fehler: "Anwendungsfehler"

    • Lösung: Überprüfe, ob der Zielbereich korrekt definiert ist und dass die Zielzeile existiert.
  2. 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.
  3. 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:

  1. Übertragen von drei Bereichen:

    • Ersetze die SpaltenArr-Definition mit den Spaltennummern, die du benötigst.
  2. 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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige