Mit VB Script bzw. Makro Tabellenreihen kopieren
Hallo liebe Leute!
Ich habe mittlerweile schon gut 4-5 Stunden versucht, dass folgende Problem in Excel zu lösen (auch mittels code Schnippseln aus google usw.), es bis jetzt jedoch leider nicht hinbekommen:
Es geht um 2 Datenblätter:
Blatt1 sieht so aus:
1 | Name1 | Adresse1 | Telefon1
2 | Name2 | Adresse2 | Telefon2
3 | Name3 | Adresse3 | Telefon3
.. | Name.. | Adresse.. | Telefon..
n | Name.. | Adresse..| Telefon..
Blatt2 sieht so aus:
23 |
19 |
1 |
57 |
18 |
9 |
.. |
.. |
Ich möchte nun mittels Makro die Zeilen aus Blatt1 auf Blatt2 kopieren, für die auf Blatt2 Zahlen existieren (die Zahlen auf Blatt2 sind random).
Blatt2 sollte dann so aussehen:
23 | Name23 | Adresse23 | Telefon23
19 | Name19 | Adresse19 | Telefon19
1 | Name1 | Adresse1 | Telefon1
.. |
.. |
usw.
Ich hoffe, jemand kann mir dabei behilflich sein, ich bin nämlich der Verzweiflung nahe
Schon mal vielen Dank im Voraus!
[Edit Biber] Ist doch ganz banal mit SVerweis() lösbar -- also verschoben von "Visual Basic, VBA und .Net" nach "Excel" [Edit]
Ich habe mittlerweile schon gut 4-5 Stunden versucht, dass folgende Problem in Excel zu lösen (auch mittels code Schnippseln aus google usw.), es bis jetzt jedoch leider nicht hinbekommen:
Es geht um 2 Datenblätter:
Blatt1 sieht so aus:
1 | Name1 | Adresse1 | Telefon1
2 | Name2 | Adresse2 | Telefon2
3 | Name3 | Adresse3 | Telefon3
.. | Name.. | Adresse.. | Telefon..
n | Name.. | Adresse..| Telefon..
Blatt2 sieht so aus:
23 |
19 |
1 |
57 |
18 |
9 |
.. |
.. |
Ich möchte nun mittels Makro die Zeilen aus Blatt1 auf Blatt2 kopieren, für die auf Blatt2 Zahlen existieren (die Zahlen auf Blatt2 sind random).
Blatt2 sollte dann so aussehen:
23 | Name23 | Adresse23 | Telefon23
19 | Name19 | Adresse19 | Telefon19
1 | Name1 | Adresse1 | Telefon1
.. |
.. |
usw.
Ich hoffe, jemand kann mir dabei behilflich sein, ich bin nämlich der Verzweiflung nahe
Schon mal vielen Dank im Voraus!
[Edit Biber] Ist doch ganz banal mit SVerweis() lösbar -- also verschoben von "Visual Basic, VBA und .Net" nach "Excel" [Edit]
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 110478
Url: https://administrator.de/forum/mit-vb-script-bzw-makro-tabellenreihen-kopieren-110478.html
Ausgedruckt am: 23.12.2024 um 00:12 Uhr
11 Kommentare
Neuester Kommentar
Die Adressen aus Blatt1 sollten lückenlos ab Zeile x untereinander stehen. Wenn dem so ist einfach mit einer for next Schleife suche ab zeile x nachfolgend nach z.B. >0 dann Zeilenummer merken, adressdaten merken (Merken=in Variablen einlesen). Die Variablen als Public deklarieren.
Dann in Blatt2 nach Vorhandensein der Adressnummer suchen, wenn gefunden die Daten aus den Variablen in die entsprechenden Felder schreiben. Wenn nicht vorhanden next.
Sind die Blätter in verschiedenen Arbeitsmappen oder in der selben Mappe????
So könntest Du die Anzahl der Adressen ermitteln, sucht in Spalte A ab Zeile A4 nach einer Leerzelle:
Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4
So könnte es funktionieren, Annahme es sind 2 Arbeitsmappen und die Daten sind ab Zeile 4/SpalteA..., ggfs. die Mappen-/Blatt Namen anpassen:
Public NameTxt
Public AdresseTxt
Public TelefonTxt
Public AdressNr
Public AdressAnzahl
Sub Adressen_Uebertragen()
Application.Workbooks("Mappe1_Adressen.XLS").Activate
Application.Sheets("Tabelle1").Activate
Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4
For i = 1 To AdressAnzahl
NameTxt = ""
AdresseTxt = ""
TelefonTxt = ""
Application.Workbooks("Mappe1_Adressen.XLS").Activate
Application.Sheets("Tabelle1").Activate
AdressNr = ActiveSheet.Cells(i + 3, 1).Value
NameTxt = ActiveSheet.Cells(i + 3, 2).Value
AdresseTxt = ActiveSheet.Cells(i + 3, 3).Value
TelefonTxt = ActiveSheet.Cells(i + 3, 4).Value
'Blatt2 muss jetzt aktiviert werden....
Application.Workbooks("Mappe2_Adressen_Kopiert.XLS").Activate
Application.Sheets("Tabelle1").Activate
For k = 1 To AdressAnzahl
If ActiveSheet.Cells(k + 3, 1).Value = AdressNr Then
ActiveSheet.Cells(k + 3, 2).Value = NameTxt
ActiveSheet.Cells(k + 3, 3).Value = AdresseTxt
ActiveSheet.Cells(k + 3, 4).Value = TelefonTxt
GoTo Naechste_Adresse
End If
Next 'k
Naechste_Adresse:
Next 'i
End Sub
Das ganze ist natürlich ohne Fehlerprozedur. Die beiden Mappen müssen geöffnet sein.
Gruß OpTiMaX
Dann in Blatt2 nach Vorhandensein der Adressnummer suchen, wenn gefunden die Daten aus den Variablen in die entsprechenden Felder schreiben. Wenn nicht vorhanden next.
Sind die Blätter in verschiedenen Arbeitsmappen oder in der selben Mappe????
So könntest Du die Anzahl der Adressen ermitteln, sucht in Spalte A ab Zeile A4 nach einer Leerzelle:
Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4
So könnte es funktionieren, Annahme es sind 2 Arbeitsmappen und die Daten sind ab Zeile 4/SpalteA..., ggfs. die Mappen-/Blatt Namen anpassen:
Public NameTxt
Public AdresseTxt
Public TelefonTxt
Public AdressNr
Public AdressAnzahl
Sub Adressen_Uebertragen()
Application.Workbooks("Mappe1_Adressen.XLS").Activate
Application.Sheets("Tabelle1").Activate
Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4
For i = 1 To AdressAnzahl
NameTxt = ""
AdresseTxt = ""
TelefonTxt = ""
Application.Workbooks("Mappe1_Adressen.XLS").Activate
Application.Sheets("Tabelle1").Activate
AdressNr = ActiveSheet.Cells(i + 3, 1).Value
NameTxt = ActiveSheet.Cells(i + 3, 2).Value
AdresseTxt = ActiveSheet.Cells(i + 3, 3).Value
TelefonTxt = ActiveSheet.Cells(i + 3, 4).Value
'Blatt2 muss jetzt aktiviert werden....
Application.Workbooks("Mappe2_Adressen_Kopiert.XLS").Activate
Application.Sheets("Tabelle1").Activate
For k = 1 To AdressAnzahl
If ActiveSheet.Cells(k + 3, 1).Value = AdressNr Then
ActiveSheet.Cells(k + 3, 2).Value = NameTxt
ActiveSheet.Cells(k + 3, 3).Value = AdresseTxt
ActiveSheet.Cells(k + 3, 4).Value = TelefonTxt
GoTo Naechste_Adresse
End If
Next 'k
Naechste_Adresse:
Next 'i
End Sub
Das ganze ist natürlich ohne Fehlerprozedur. Die beiden Mappen müssen geöffnet sein.
Gruß OpTiMaX
Dann brauchst Du die Mappe nicht zu wechseln.
Public NameTxt
Public AdresseTxt
Public TelefonTxt
Public AdressNr
Public AdressAnzahl
Sub Adressen_Uebertragen()
Application.Sheets("Blatt1").Activate
Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4
For i = 1 To AdressAnzahl
NameTxt = ""
AdresseTxt = ""
TelefonTxt = ""
Application.Sheets("Blatt1").Activate
' Beschreibung... ActiveSheet.Cells(ZeileNummer,SpalteNummer)
AdressNr = ActiveSheet.Cells(i + 3, 1).Value
NameTxt = ActiveSheet.Cells(i + 3, 2).Value
AdresseTxt = ActiveSheet.Cells(i + 3, 3).Value
TelefonTxt = ActiveSheet.Cells(i + 3, 4).Value
'Blatt2 muss jetzt aktiviert werden....
Application.Sheets("Blatt2").Activate
For k = 1 To AdressAnzahl
If ActiveSheet.Cells(k + 3, 1).Value = AdressNr Then
ActiveSheet.Cells(k + 3, 2).Value = NameTxt
ActiveSheet.Cells(k + 3, 3).Value = AdresseTxt
ActiveSheet.Cells(k + 3, 4).Value = TelefonTxt
GoTo Naechste_Adresse
End If
Next 'k
Naechste_Adresse:
Next 'i
End Sub
Public NameTxt
Public AdresseTxt
Public TelefonTxt
Public AdressNr
Public AdressAnzahl
Sub Adressen_Uebertragen()
Application.Sheets("Blatt1").Activate
Columns("A").Find("", After:=[A3]).Select
AdressAnzahl = Selection.Row - 4
For i = 1 To AdressAnzahl
NameTxt = ""
AdresseTxt = ""
TelefonTxt = ""
Application.Sheets("Blatt1").Activate
' Beschreibung... ActiveSheet.Cells(ZeileNummer,SpalteNummer)
AdressNr = ActiveSheet.Cells(i + 3, 1).Value
NameTxt = ActiveSheet.Cells(i + 3, 2).Value
AdresseTxt = ActiveSheet.Cells(i + 3, 3).Value
TelefonTxt = ActiveSheet.Cells(i + 3, 4).Value
'Blatt2 muss jetzt aktiviert werden....
Application.Sheets("Blatt2").Activate
For k = 1 To AdressAnzahl
If ActiveSheet.Cells(k + 3, 1).Value = AdressNr Then
ActiveSheet.Cells(k + 3, 2).Value = NameTxt
ActiveSheet.Cells(k + 3, 3).Value = AdresseTxt
ActiveSheet.Cells(k + 3, 4).Value = TelefonTxt
GoTo Naechste_Adresse
End If
Next 'k
Naechste_Adresse:
Next 'i
End Sub
in diesem Fall mit Sverweis und dynamische Felddefinition...
@108269
Gern geschehen