Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1200to1204
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

In zweite Mappe kopieren und dabei Text trennen

In zweite Mappe kopieren und dabei Text trennen
Stefan
Hallo,
Folgendes Problem:
Ich habe hier zwei Tabellen hochgeladen als Beispiel.
https://www.herber.de/bbs/user/73756.xlsx
https://www.herber.de/bbs/user/73757.xlsx
Tabellenblatt "FI" aus der Arbeitsmappe "Brainstorming_FI_CO_test.xlsx" (Quelle)
Tabellenblatt "GSZ_OP_TA_BSP" aus der Arbeitsmappe "INFOBOX_FICO_test.xlsm" (Ziel)
Quelle wird ständig befüllt. Diese Daten sollen dann vom Anwender in Ziel kopiert werden ohne
daß er/sie mit der Zieldatei direkt in Berührung kommt. Idee: Markieren der Zeile(n)
in die neuen Eintragung(en) vorgenommen wurde(n) in der Quelltabelle. Klicken auf einen Button.
Jetzt öffnet sich im Hintergrund die Zieltabelle. Daten werden in Zieltabelle kopiert.
Zieltabelle schließt.
Einträge in Spalte B"GSZ Aufstellung" sind eindeutig, kommen also nicht doppelt vor. Kann als Schlüssel
verwendet werden.
Das schwierige :
Aus der Quelltabelle Spalte D "Transaktionen" soll in Zieltabelle Spalte F "Transaktionen"
kopiert werden.
Die Einträge in Quelltabelle Spalte B "GSZ_Aufstellung" sollen aufgesplittet werden und in
verschiedene Spalten der Zieltabelle kopiert werden. Und zwar folgendermaßen:
z. Bsp. GSZ_6000_K001_DE_light_FT_GS_an_Mitglied_V1_RAM
1. GSZ_6000_K001 (sind immer die ersten 13 Zeichen) soll in Zieltabelle Spalte B "GSZ-Kettennummer"
2. DE (ist immer das 15 und 16 Zeichen) soll in Spalte soll in Zieltabelle Spalte G "Land"
3. DE_light_FT_GS_an_Mitglied_V1_RAM (ist immer das 15. Zeichen bis Ende) soll in Zieltabelle
Spalte C "GSZ_Name"
4. RAM (sind immer die letzten 3 Zeichen) soll in Zieltabelle Spalte H "Ersteller".
Ich hoffe das Problem ist verständlich dargestellt.
Kann mir hiermit jemand weiterhelfen?
Viele Grüße
Stefan
AW: In zweite Mappe kopieren und dabei Text trennen
28.02.2011 13:06:07
Klaus
Hallo Stefan,
deine Beispieltabellen sind leider xlsx-Formatig und noch dazu sehr unübersichtlich. Da "Zieldatei öffen" usw. auf meinem PC eh anders aussähe als bei dir (andere Verzeichnissstruktur & Dateinamen) und das ganze Rekorderfähig ist, spare ich mir mal das Makro vorzubasteln.
Mein Lösungsvorschlag:
Aus der Quelltabelle Spalte D "Transaktionen" soll in Zieltabelle Spalte F "Transaktionen"
kopiert werden.

Das ist einfach. Bekommst du bestimmt selbst hin?
Die Einträge in Quelltabelle Spalte B "GSZ_Aufstellung" sollen aufgesplittet werden und in
verschiedene Spalten der Zieltabelle kopiert werden.

kopiere zunächst den gesamten Zelleninhalt nach Spalte K in der Zieltabelle (oder eine passende Hilfsspalte). Sagen wir mal, du kopierst den neuesten Wert nach K5:
Und zwar folgendermaßen:
z. Bsp. GSZ_6000_K001_DE_light_FT_GS_an_Mitglied_V1_RAM
1. GSZ_6000_K001 (sind immer die ersten 13 Zeichen) soll in Zieltabelle Spalte B "GSZ-Kettennummer"

=LINKS(K5;13)
2. DE (ist immer das 15 und 16 Zeichen) soll in Spalte soll in Zieltabelle Spalte G "Land"
=TEIL(K5;15;2)
3. DE_light_FT_GS_an_Mitglied_V1_RAM (ist immer das 15. Zeichen bis Ende) soll in Zieltabelle
Spalte C "GSZ_Name"

=TEIL(K5;15;9^9)
4. RAM (sind immer die letzten 3 Zeichen) soll in Zieltabelle Spalte H "Ersteller".
=RECHTS(K5;3)
Mit den Formeln extrahierst du deine String-Bestandteile wie gewünscht. Die Formeln kannst du direkt ins kopier-Makro einbauen, dazu einfach den Rekorder bemühen (und anpassen).
Im weiteren Makroverlauf überschreibst du alle Formeln mit echten Werten (Rekorder: Kopieren, Inhalte Einfügen, Werte) und löscht die überflüssige Hilfsspalte K wieder.
Hilft der Ansatz?
Grüße,
Klaus M.vdT.
Anzeige
AW: In zweite Mappe kopieren und dabei Text trennen
28.02.2011 14:56:58
Stefan
Hallo,
leider reichen meine Kentnisse von VBA nicht sehr weit. Zu den Tabellen: Es geht nur um die Zeilen , die in Spalte B der Quelldatei mit "GSZ" beginnt. Verzeichnisstruktur und Namen kann ich anpassen.
Vielleicht gibt es ja eine Möglichkeit.
Viele Grüße
Stefan
AW: In zweite Mappe kopieren und dabei Text trennen
28.02.2011 17:33:20
Stefan
Hallo,
vielleicht hilft es noch, daß die Spalten auch umbenannt oder umsortiert werden können.
Grüße
Stefan
Bitte vorarbeit leisten!
01.03.2011 09:57:12
Klaus
Hi Stefan,
wirf mal den Rekorder an, mach alles aus meinem zweiten Posting (kopieren, kopieren, Formeln eingeben, Inhalte einfügen, Hilfsspalte löschen) und poste das Ergebniss hier.
Grüße,
Klaus M.vdT.
Anzeige
AW: Bitte vorarbeit leisten!
02.03.2011 13:21:06
Stefan
Hallo,
Vielen Dank erst mal für die Hilfe.
ich habe deinen Vorschlag ausgeführt. Der Code ist folgender:
Sub Makro4()
' Makro4 Makro
' Tastenkombination: Strg+a
Selection.Copy
Windows("INFOBOX_FICO_test.xlsm").Activate
Range("K4").Select
ActiveSheet.Paste
Range("B4").Select
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = "=LEFT(RC[9],13)"
Range("C4").Select
ActiveCell.FormulaR1C1 = "=MID(RC[8],15,9^9)"
Range("G4").Select
ActiveCell.FormulaR1C1 = "=MID(RC[4],15,2)"
Range("H4").Select
ActiveCell.FormulaR1C1 = "=RIGHT(RC[3],3)"
Range("B4:H4").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
ActiveWindow.SmallScroll ToRight:=3
Columns("K:K").Select
Application.CutCopyMode = False
Selection.Delete Shift:=xlToLeft
ActiveSheet.Paste
End Sub

und für den Punkt
Aus der Quelltabelle Spalte D "Transaktionen" soll in Zieltabelle Spalte F "Transaktionen"
kopiert werden ist es folgender Code:
Windows("Brainstorming_FI_CO_test.xlsm").Activate
Range("D3").Select
Selection.Copy
Windows("INFOBOX_FICO_test.xlsm").Activate
Range("F4").Select
ActiveSheet.Paste
Ich hoffe das hilft weiter.
Viele Grüße
Stefan
Anzeige
Probier mal dieses aus:
03.03.2011 07:29:57
Klaus
Hi,
probier mal dieses aus:

Sub Makro4()
'Tastenkombination STRG+a
Dim lRow As Long
Dim sRow As Long
'Ursprungstabelle: Daten kopieren
Selection.Copy
sRow = Selection.Row
'Zieltabelle in den Focus holen
Windows("INFOBOX_FICO_test.xlsm").Activate
With ActiveSheet
'letzte freie Zeile der Zieltabelle finden
lRow = .Range("K65536").End(xlUp).Row + 1
'Ursprungsdatensatz einfügen
.Range("K" & lRow).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
'String-Zerteilungs Formeln einfügen
.Range("B" & lRow).FormulaR1C1 = "=LEFT(RC[9],13)"
.Range("C" & lRow).FormulaR1C1 = "=MID(RC[8],15,9^9)"
.Range("G" & lRow).FormulaR1C1 = "=MID(RC[4],15,2)"
.Range("H" & lRow).FormulaR1C1 = "=RIGHT(RC[3],3)"
.Range("B" & lRow & ":H" & lRow).Value = .Range("B" & lRow & ":H" & lRow).Value
.Columns("K:K").ClearContents
End With
'Transaktionen kopieren
Windows("Brainstorming_FI_CO_test.xlsm").Activate
ActiveSheet.Range("D" & sRow).Copy
Windows("INFOBOX_FICO_test.xlsm").Activate
ActiveSheet.Range("F" & lRow).PasteSpecial Paste:=xlValues
End Sub

Grüße,
Klaus M.vdT:
Anzeige
Ups, da passt was nicht:
03.03.2011 09:24:29
Klaus
Hi Stefan,
sorry da passt was nicht.
lRow = .Range("K65536").End(xlUp).Row + 1
nähme immer die erste Zeile, da Spalte K ja gelöscht wird. Stattdessen sollte das es tuen
lRow = .Range("B65536").End(xlUp).Row + 1
Grüße,
Klaus M.vdT.
AW: Ups, da passt was nicht:
03.03.2011 10:44:34
Stefan
Hallo,
Vielen Dank erst mal für die Hilfe.
Ich habe den Code in ein Modul eingefügt und 'Tastenkombination STRG+a' gedrückt. Funktioniert leider noch nicht. Fehlermeldung kommt keine. Es wird das ganze Tabellenblatt markiert. Ich habe den Code auch
in Tabelle 1 eingefügt und mit einem 'ClickCommand' Button verknüpft und tut sich nichts.
Viele Grüße
Stefan
Anzeige
AW: Ups, da passt was nicht:
03.03.2011 11:34:02
Klaus
Hallo Stefan,
STRG+a ist "alles markieren". Diese (oder eine andere) Tastenkombination zum starten musst du noch per
"Extra-Makro-Makros-Optionen" zuweisen. Ich hatte die Kommentierung von deiner Aufzeichnung übernommen und dachte du kennst das ...
Zum testen, gehe mal in die Starttabelle, öffne das VBA Fenster, clicke in die Prozedur und gehe sie mit F8 im Einzelschritt durch, dann siehst du ob undwas gerade passert. Aber nicht schummeln und die Fenster wechseln!
Grüße,
Klaus M.vdT.
AW: Ups, da passt was nicht:
03.03.2011 12:03:16
Stefan
Hallo Klaus,
Vielen Dank. Der Code funktioniert soweit. Es gibt nur noch ein Problem:
Wenn ich aus der Quelltabelle heraus in die Zieltabelle kopiere dann werden die Daten immer in
die Zeile 2 kopiert, d.h. beim ersten kopieren in Zeile 2 und beim kopieren der nächsten Daten
wird die Zeile 2 überschrieben anstatt dann in die nächste freie Zeile zu kopieren
(vielleicht hilft es noch, wenn ich sage, daß ich die Zelle K2 als Hilfszelle benutzt habe,
so wie du es gesagt hast). Ich hoffe ich habe mich verständlich ausgedrückt).
Es müßte also so sein, daß bei jedem kopieren aus der Quelltabelle in die jeweils
nächste leere Zeile der Zieltabelle kopiert wird. Gibt es hierfür noch eine Lösung?
Grüße
Stefan
Anzeige
AW: Ups, da passt was nicht:
03.03.2011 12:26:23
Klaus
Hallo Stefan,
B ist immer befüllt, oder? dann such diese Codezeile
lRow = .Range("K65536").End(xlUp).Row + 1
und ändere sie in
lRow = .Range("B65536").End(xlUp).Row + 1
Grüße,
Klaus M.vdT.
AW: Ups, da passt was nicht:
03.03.2011 12:49:25
Stefan
Hallo,
du hast mir sehr geholfen damit.
Funktioniert hervorragend. Jetzt ist aber noch ein Problem aufgetaucht von dem
ich bisher nichts wußte. Sorry, wenn ich damit nerve.Folgendes:
In die Quelltabelle wurde noch eine Spalte eingefügt (Spalte B) in deren Zellen die Namen
der Tabellenblätter der Zieltabelle stehen. Die zu kopierenden Daten sollen nun
entsprechend dem Eintrag in Spalte B der Quelltabelle in das entsprechende Tabellenblatt
der Zieltabelle kopiert werden.
Wenn z.Bsp. in B3 steht "GSZ_OP_TA_Debi" dann sollen die Daten der Zeile in das
Tabellenblatt "GSZ_OP_TA_Debi" kopiert werden.
Wenn z.Bsp. in B30 steht "GSZ_OP_TA_Kredi" dann sollen die Daten in der Zeile in
das Tabellenblatt "GSZ_OP_TA_Kredi" kopiert werden.
Ist das realisierbar?
Vielen Dank
Grüße
Stefan
Anzeige
AW: Ups, da passt was nicht:
03.03.2011 13:24:46
Klaus
HI Stefan,
das schüttel ich mal aus dem Ärmel:
      Sub Makro4()
Dim lRow As Long
Dim sRow As Long
Dim myWks As String
'Ursprungstabelle: Daten kopieren
myWks = Range("B" & Selection.Row).Value
Selection.Copy
sRow = Selection.Row
'Zieltabelle in den Focus holen
Windows("INFOBOX_FICO_test.xlsm").Activate
With Sheets(myWks)
'letzte freie Zeile der Zieltabelle finden
lRow = .Range("B65536").End(xlUp).Row + 1
'Ursprungsdatensatz einfügen
.Range("K" & lRow).PasteSpecial Paste:=xlValues
Application.CutCopyMode = False
'String-Zerteilungs Formeln einfügen
.Range("B" & lRow).FormulaR1C1 = "=LEFT(RC[9],13)"
.Range("C" & lRow).FormulaR1C1 = "=MID(RC[8],15,9^9)"
.Range("G" & lRow).FormulaR1C1 = "=MID(RC[4],15,2)"
.Range("H" & lRow).FormulaR1C1 = "=RIGHT(RC[3],3)"
.Range("B" & lRow & ":H" & lRow).Value = .Range("B" & lRow & ":H" & lRow).Value
.Columns("K:K").ClearContents
End With
'Transaktionen kopieren
Windows("Brainstorming_FI_CO_test.xlsm").Activate
ActiveSheet.Range("D" & sRow).Copy
Windows("INFOBOX_FICO_test.xlsm").Activate
ActiveSheet.Range("F" & lRow).PasteSpecial Paste:=xlValues
End Sub
Achtung ungetestet!
Es findet keinerlei Fehlerbehandlung statt! Wenn das Ziel-Blatt nicht existiert oder Leerzeichen darin vorkommen, bricht der Code mit Fehlermeldung ab.
Grüße,
Klaus M.vdT.
Anzeige
VBA-Spezis: Activate vermeiden bei Fensterwechsel?
03.03.2011 13:31:07
Klaus
Hallo alle anderen,
ich habe für Stefan diesen Code zusammen gestrickt der auch zu funktionieren scheint. Ich selbst arbeite seltenst mit Code der über verschiedene Excel-Instanzen übergreift und hab daher nur eine Notlösung stricken können:

'Transaktionen kopieren
Windows("Brainstorming_FI_CO_test.xlsm").Activate
ActiveSheet.Range("D" & sRow).Copy
Windows("INFOBOX_FICO_test.xlsm").Activate
ActiveSheet.Range("F" & lRow).PasteSpecial Paste:=xlValues
Wie bekomme ich aus dem Codefetzen denn die hässlichen "Activate" weg? Das müsste doch auch mit einem einzeiligen Copy-Befehl gehen!
Grüße,
Klaus M.vdT.
Anzeige
AW: VBA-Spezis: Activate vermeiden bei Fensterwechsel?
03.03.2011 13:42:32
Stefan
Hallo Klaus,
super, funktioniert, du hast mir damit sehr geholfen. Vielen Dank. Drei Fragen
hätte ich aber noch.
Erstens: Kann man den Code noch so modifizieren, daß die Zieldatei im Hintergrund
vor dem kopieren öffnet und nach dem kopieren speichert und wieder schließt?
Im Moment muß die Zieltabelle ja geöffnet sein.
Zweitens: Kann man den Code so modifizieren, daß man mehrere Zellen in der
Spalte C markieren kann, die dann kopiert werden? Bisher ist es so, daß immer
nur eine Zeile der Quelldatei kopiert wird. Diese ist schon mit ca. 180 Zeilen
befüllt und ich möchte nicht jede einzeln markieren und kopieren.
Und die dritte Frage: Du hast mir die Formel
3. DE_light_FT_GS_an_Mitglied_V1_RAM (ist immer das 15. Zeichen bis Ende)
soll in Zieltabelle Spalte C "GSZ_Name"
=TEIL(K5;15;9^9)gegeben. Was leistet denn eigentlich dieses "9^9"?
Vielen Dank nochmal. Du hast mir wirklich sehr geholfen
Viele Grüße
Stefan
paar Antworten
03.03.2011 14:46:28
Klaus
Hallo Stefan,
Mehrere Zeilen kopieren:
an dieser Stelle steige ich leider aus, da mein VBA Horizont erreicht ist. Müsse aber mit einer schleife über die Selection zu machen sein. Ist mir zu heikel, da einen Code "blind" zu stricken ohne ihn testen zu können ....
Frag bitte mit einer neuen Beispieldatei und dem Code bisher in einem neuen Thread, ich kann ab hier nur noch verschlimmbessern.
Wie die Datei geöffnet wird ergoogelst du dir bitte (hab ich grad nicht im Kopf), schließen kannst du sie mit "ActiveWorkbook.close". Speichern nicht vergessen! Die Syntax zum speichern der aktiven Tabelle entnimmst du dem Makrorekorder.
=TEIL(K5;15;9^9)gegeben. Was leistet denn eigentlich dieses "9^9"?
TEIL nimmt vom Text K5 ab Stelle 15 die nächsten X Zeichen, bis zum Stringende. Wie lange der String in K5 ist, ist unbekannt. 9^9 ergibt die Zahl 387.420.489 - das dein String nahe vierhundermillionen Zeichen hat ist aber eher unwarscheinlich, daher werden immer alle verbleibenden Stellen ab der 15ten genommen.
Ganz korrekt müsste man =TEIL(K5;15;LÄNGE(K5)-15) schreiben, aber 9^9 tuts wie gesagt bis knapp vierhundermillionen Zeichen genauso und ist schneller zu tippen. Ist halt eine verdammt große Zahl, die mit wenigen Zeichen getippt wird.
Grüße,
Klaus M.vdT.
AW: paar Antworten
03.03.2011 14:56:30
Stefan
Hallo,
okay, du hast mir sehr geholfen. Der Quellcode funktioniert hervorragend.
Vielen Dank
Stefan
Danke für die Rückmeldung! o.w.T.
04.03.2011 08:13:53
Klaus
.

307 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige