Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1632to1636
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

variable Range

variable Range
18.07.2018 11:19:34
Linda
Hi Zusammen,
ich komme leider nicht weiter, kann mir bitte jemand helfen?
Ich muss aus einer "Alten Mappe" Werte in eine "Neue Mappe" kopieren.
Leider nicht an die selben Stellen (Zellen).
Jetzt bin ich wie folgt vorgegangen und habe mal eine Liste gemacht.
In Spalte B habe ich alle Zellbezeichnungen runtergeschrieben der Alten Mappe (z.B. AD4, AD6, AD8......AE4, AE6, AE8,....)
In Spalte C habe ich alle Zellbezeichnungen der Neuen Mappe gegenübergestellt (z.B. R4, R6, R8,......S4, S6, S8,....)
Die Liste ist seeehr lang. Wenn ich das händisch mache bin ich Wochen beschäftigt....
Ich bin leider VBA-Anfänger und habe keine Idee, wie ich hier ein Makro schreiben könnte, dass mir alle aufgelisteten Zellen der alten Mappe in die aufgelisteten Zellen der neuen Mappe kopiert.
Erbarmt sich jemand meiner?
Liebe Grüße
Linda

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: variable Range
18.07.2018 11:37:51
Hajo_Zi
Columns(2).Copy Workbooks("Datei.xlsm").Worksheets("Tabelle1").Range("C1")

Beiträge von Werner, Luc, robert, J.O.Maximo und folgende lese ich nicht.
AW: variable Range
18.07.2018 12:01:40
Linda
Hi Hajo,
Ich hab mich vermutlich nicht klar ausgedrückt.
Ich will nicht die Spalte B von der Alten Mappe in die Spalte C einer Neuen Mappe kopieren. Das wäre einfach.
Ich habe ganz vielen Zellen in einer Alten Mappe, dessen Werte ich an anderen STellen in einer neuen Mappe einfügen möchte.
Ich habe einer Liste (in einer dritten Mappe) gemacht und die Zellpositionen gegenübergestellt. In Spalte B stehen die Zellpositionen der ALTEN Mappe und Spalte C werden die Zellpositionen der NEUEN Mappe gegenübergestellt.
Ich hab mir das so vorgestellt:
Workbooks("Mappe ALT"). Sheets(PN).Range(x).Copy
Workbooks("Mappe NEU").Sheets(PN).Range(y).Paste
Zuerst muss ich natürlich Variablen benennen, hier hab ich meine Probleme.
PN schreib ich einfach in eine Zelle der ich den Namen PN gegeben habe und ändere den Zellinhalt dann immer wenn das nächste sheet dran ist. Das geht sicher auch einfacher, ich weiß aber nicht wie...
Aber nun zu meinem Hauptproblem, der Range-Variablen:
X = Workkbooks("Alte Mappe").Sheets("PN").Range(ALT)
jetzt kommt meine Liste ins Spiel, in der die Zellpositionen aufgeschrieben wurden, ob das funktionieren kann weiß ich nicht:
ALT= Workbooks("Datenübertragung").Sheets("Zellen").Range("B4:B400")
Y= Workkbooks("Neue Mappe").Sheets("PN").Range(NEU)
NEU= Workbooks("Datenübertragung").Sheets("Zellen").Range("C4:C400")
Anzeige
AW: variable Range
18.07.2018 11:47:19
UweD
Hallo
Bei diesem Aufbau:

Tabelle1
 ABC
1 Alte MappeNeue Mappe
2 AD4R4
3 AD6R6
4 AD8R8
5 AE4S4
6 AE6S6
7 AE8S8
8   
http://excel-inn.de/dateien/vba_beispiele/tabellenanzeige_in_html_addin.zip
http://Hajo-Excel.de/tools.htm
XHTML-Tabelle zur Darstellung in Foren, einschl. der neuen Funktionen ab Version 2007
Add-In-Version 25.14 einschl. 64 Bit


so?
Sub Indirekt_copy()
    Dim WB1 As Workbook, WB2 As Workbook
    Dim TB1 As Worksheet, TB2 As Worksheet
    Dim LR As Long, i As Long
    Dim SP As Integer, EZ As Integer
    
    Set WB1 = Workbooks("Alte Mappe.xlsx")
    Set TB1 = WB1.Sheets(1)
    Set WB2 = ThisWorkbook
    Set TB2 = WB2.Sheets(1)
    
    EZ = 2 'wegen Überschrift 
    SP = 2 'Werte stehen in B 
    
    LR = TB2.Cells(TB2.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte 

    For i = EZ To LR
        TB2.Range(TB2.Cells(i, SP + 1)) = TB1.Range(TB2.Cells(i, SP))
    Next
End Sub
LG UweD
Anzeige
AW: variable Range
18.07.2018 12:56:17
Linda
Hi UweD,
ich danke dir, das ist vermutlich der richtige Weg. Ich habe noch ein drittes Workbook mit der Gegenüberstellung der Zellpositionen. Das Makro weiß noch nicht, dass es die Zellpositionen aus der dritten Mappe nehmen soll. Und dann muss ich noch definieren, dass die Zellpositionen von X in der dritten Mappe Spalte B zu finden sind und die Zellpositionen von Y in der dritten Mappe Spalte C. (Oh Mann, ich muss mich dringend mal intensiver mit Variablen beschäftigen, mir fehlt der Durchblick..... ;-).... )
For i= ....usw. muss dann wohl raus. Du wusstest das mit den Zellbezügen nicht.....
Geht das überhaupt, dass ich einen Liste mit Zellbezügen in Excel mache und dann mit VBA darauf zugreife?

Sub Indirekt_copy()
Dim WB1 As Workbook, WB2 As Workbook, WB3 As Workbook
Dim TB1 As Worksheet, TB2 As Worksheet, TB3 As Worksheet
Dim LR As Long, i As Long
Dim SP As Integer, EZ As Integer
Set WB1 = Workbooks("LV_Alt.xlsm")
Set TB1 = WB1.Sheets(PN)
Set WB2 = Workbooks("LV_Neu.xlsm")
Set TB2 = WB2.Sheets(PN)
Set WB3 = Workbooks("Datenübertragung.xlsm")
Set TB3 = WB3.Sheets("Zellen")
EZ = 4 'wegen Überschrift
SP = 2 'Werte stehen in B
LR = TB3.Cells(TB3.Rows.Count, SP).End(xlUp).Row 'letzte Zeile der Spalte
For i = EZ To LR
TB2.Range(TB2.Cells(i, SP + 1)) = TB1.Range(TB2.Cells(i, SP))
Next
TB1.Range(x).Copy
TB2.Range(y).PasteSpecial
End Sub

Anzeige
AW: variable Range
18.07.2018 13:15:33
UweD
Hallo nochmal
- Habe das auf die 3 Dateien und 3 Blätter angepasst
- PN muss in ""
- Die Spalten kannst du jetzt auch einstellen
For i= ....usw. muss dann wohl raus
Nein, da wird doch das Kopieren durchgeführt (also genau genommen nicht kopiert, sondern der gelesene Wert wird ins Ziel reingeschrieben)
- Das von dir eingefügte copy / past brauchst du nicht..
Sub Indirekt_copy()

    Dim WB1 As Workbook, WB2 As Workbook, WB3 As Workbook
    Dim TB1 As Worksheet, TB2 As Worksheet, TB3 As Worksheet
    Dim LR As Long, i As Long
    Dim SpA As Integer, SpN As Integer, EZ As Integer
    
    Set WB1 = Workbooks("LV_Alt.xlsm")
    Set TB1 = WB1.Sheets("PN")
    Set WB2 = Workbooks("LV_Neu.xlsm")
    Set TB2 = WB2.Sheets("PN")
    Set WB3 = Workbooks("Datenübertragung.xlsm")
    Set TB3 = WB3.Sheets("Zellen")
    
    EZ = 4 'wegen Überschrift 
    SpA = 2 'Alte Zellbezüge stehen in B 
    SpN = 3 'Neue Zellbezüge stehen in C 
    
    LR = TB3.Cells(TB3.Rows.Count, SpA).End(xlUp).Row 'letzte Zeile der Spalte 

    
    'Kopieren laut WB3 Vorgabe von WB1 in WB2 
    For i = EZ To LR
        TB2.Range(TB3.Cells(i, SpN)) = TB1.Range(TB3.Cells(i, SpA))
    Next
   
    
End Sub

LG UweD
Anzeige
AW: variable Range
18.07.2018 12:04:20
Daniel
Hi
Jeden Zellbereich auflisten ist mühselig.
Gibt es eine Regel, die man anwenden kann, z.b. ",jede zweite Zeile ab Zeile 4 bis zur letzten benutzten Zeile?
Was steht in den Zwischenzeilen in beiden Tabellen?
Ggf ist es Günstiger, alles als Block in einem Schritt zu kopieren und dann die Zwischenzeiten im Ziel zu löschen.
Gruß Daniel
AW: variable Range
18.07.2018 12:56:41
Gerd
Hallo Linda,
Code in die 3. Mappe mit der Liste in Tabelle1
Bei AlteMappe u. NeueMappe die Dateiendungen .xlsx oder .xlsm ggf. bitte ergänzen
und die Mappennamen u. Tabellennamen von Quelle u. Ziel noch anpassen.
Sub test()
Dim Zeile As Long
For Zeile = 1 To 400
Workbooks("AlteMappe").Worksheets("Tabelle88").Range(Tabelle1.Cells(Zeile, "B")).Copy _
Workbooks("NeueMappe").Worksheets("Tabelle44").Range(Tabelle1.Cells(Zeile, "C"))
Application.CutCopyMode = False
Next
End Sub

Gruß Gerd
Anzeige
AW: variable Range
18.07.2018 13:27:30
Linda
Habs gerade ausprobiert.
Bei copy und Paste stoppt der Debugger. Leider...:-(

Sub test_Copy()
Dim Zeile As Long
For Zeile = 4 To 400
Workbooks("LV_Alt").Worksheets("PN").Range(Tabelle1.Cells(Zeile, "B")).Copy _
Workbooks("LV_Neu").Worksheets("PN").Range(Tabelle1.Cells(Zeile, "C")).PasteValues
Application.CutCopyMode = False
Next
End Sub

AW: variable Range
18.07.2018 16:02:50
fcs
Hallo Linda,
das Problem sind wahrscheinlich verbundene Zellen.
Ich hatte mich auch mit deinem Problem beschäfftigt.
Außer den Zellen in der Liste werden auch die Namen Der Dateien Alt/NEU) und der Tabellenblätter aus dem Blatt mit der Liste der Zelladressen ausgelesen - so muss mam im Code nichts ändern, wenn sich Namen ändern. Wenn die größe der verbundene Zellbereiche in Alt und Neu identisch ist sollte meine Lösung funktionieren.
Gruß
Franz
'Makro in einem allgeneinen Modul
'Beim Start der Makros musss das Blatt mit Zellen-Liste das aktive Blatt sein!
Sub prcDaten_von_ALT_nach_NEU()
'Überträgt die Inhalte der Zellen gemäß Liste in eine andere Mappe
Dim wkbAlt As Workbook, wkbNeu As Workbook
Dim wksAlt As Worksheet, wksNeu As Worksheet
Dim wksSteuerung As Worksheet
Dim arrZellen, intZ As Integer
Set wksSteuerung = ActiveSheet 'Blatt in 3. Datei mit Liste der Zellen
With wksSteuerung
' Werte für Datei- und Blattnamen aus Zelleneinlesen
Set wkbAlt = Application.Workbooks(.Range("G2").Text) 'ALte Datei
Set wksAlt = wkbAlt.Worksheets(.Range("F2").Text)     'altes Blatt
Set wkbNeu = Application.Workbooks(.Range("G4").Text) 'neue Datei
Set wksNeu = wkbNeu.Worksheets(.Range("F4").Text)     'neues Blatt
If MsgBox("Daten übertragen von: " & wkbAlt.Name & "!" & wksAlt.Name & vbLf & vbLf _
& "nach: " & wkbNeu.Name & "!" & wksNeu.Name, vbOKCancel, _
"D A T E N   Ü B E R T R A G E N von ALT nach NEU") = vbCancel Then Exit Sub
'Zellenliste in Array übernehmen
arrZellen = .Range(.Cells(2, 2), .Cells(.Rows.Count, 3).End(xlUp))
End With
'Makrobremsen lösen
With Application
.ScreenUpdating = False
.Calculation = xlCalculationManual
End With
For intZ = LBound(arrZellen, 1) To UBound(arrZellen, 1)
'nur die Inhalte/Werte der Zellen von ALT nach NEU übertragen
'    wksNeu.Range(arrZellen(intZ, 2)) = wksAlt.Range(arrZellen(intZ, 1))
'Zellen von ALT nach NEU kopieren Werte/Formeln/Formate
'kann Probleme bei Formeln bereiten (Zellbezüge) und verbundenen Zellen
With wksAlt.Range(arrZellen(intZ, 1))
If .MergeCells = True Then
.MergeArea.Copy wksNeu.Range(arrZellen(intZ, 2)).Resize(.MergeArea.Rows.Count, _
.MergeArea.Columns.Count)
Else
.Copy wksNeu.Range(arrZellen(intZ, 2))
End If
End With
Next
'Makrobremsen zurücksetzen
With Application
.ScreenUpdating = True
.Calculation = xlCalculationAutomatic
End With
wkbNeu.Activate
MsgBox "Fertig"
End Sub

Anzeige
AW: variable Range
19.07.2018 10:57:18
Linda
Hallo Franz,
vielen Dank, dass du den Code für mich geschrieben hast. Ich denke ich bin jetzt schon nah dran :-)
Leider habe ich tatsächlich verbundene Zellen in meiner "Neuen Mappe". Diese sind auch so gewollt. In meiner "Alten Mappe" sind die Zellen nicht verbunden.
Da ich aber die Zellpositionen in meiner dritten Mappe exakt notiert habe, möchte ich die Übernahme der Daten versuchen ohne Zellverbindungen aufzulösen.
Ich habe versucht deinen Code zu enziffern. Ab dem Bereich For intZ = LBound(arrZellen.....usw wird es für mich schwierig (Verständnisprobleme)... Ich dachte, ich lösche den Bereich mit den Verbundenen Zellen einfach

For intZ = LBound(arrZellen, 1) To UBound(arrZellen, 1)
'nur die Inhalte/Werte der Zellen von ALT nach NEU übertragen
'    wksNeu.Range(arrZellen(intZ, 2)) = wksAlt.Range(arrZellen(intZ, 1))
'Zellen von ALT nach NEU kopieren Werte/Formeln/Formate
'kann Probleme bei Formeln bereiten (Zellbezüge) und verbundenen Zellen
With wksAlt.Range(arrZellen(intZ, 1))
.Copy wksNeu.Range(arrZellen(intZ, 2))
End With
Next
Debugger stoppt bei:
 With wksAlt.Range(arrZellen(intZ, 1))

Wie gesagt, ich verstehe den Code in dem Bereich nicht und komm deshalb nicht weiter...
Anzeige
AW: variable Range
19.07.2018 22:10:20
fcs
Hallo Linda,
wenn du in ALT keine verbundenen Zellen hast und in NEU kommen verbundene Zellen vor dan kann man nur mit etlichen Klimmzügen die Kopierfunktion nutzen.
1. Eine Prüfung ob in neu die Zelle zu einem verbundenen Bereich gehöröt.
WENN NEIN, dann normal kopieren
WENN NEIN, dann
1. Adresse des Zell-Bereichs der verbundenen Zellen in Variable merken.
2. Zellverbund auflösen
3. Zelle ALT nach NEU kopieren
4. gemerkte Zellen in NEU wieder verbinden.
Wenn in ALT in den Zellen nur Werte (keine Formeln!!!) stehen, dann solltest du das Makro verwenden, das nur die Werte überträgt.
Gruß
Franz
hier die Steuerungsdatei mit den Makros und jeweils die von mir verwendeten Test-Dateien für ALT und NEU in einer ZIP-Datei.
https://www.herber.de/bbs/user/122800.zip
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige