Gelöschtes Mitglied 683020
Guest
Gecko lernt VBA, Teil 9000, wieder mit Likes für die Antwort.
Leider eine relativ komplizierte Anfrage, ich bin mir nicht sicher, ob es verständlich rüberkommt. Noch kann ich (Datenschutz), die Tabellen anfügen. Im Grunde ist das Problem relativ einfach, auch bereits gelöst: Ich muss aus einem Workbook A Produktdaten in ein anderes Workbook B übertragen. Das Hauptproblem ist, dass Workbook B standardisiert ist, Workbook A aber aussieht wie Kraut und Rüben, in etwa so:
Workbook A:
Spalte 1 | Spalte 2 | Spalte 3 | Spalte 4 | Spalte 5
Id-Nr | Produktüberschrift | Fließtext (technische Details) | Fließtext (SEO-Text) | Fließtext (Sonstige Anmerkungen)
Workbook B:
Spalte 1 | Spalte 2 | Spalte n | ... Spalte n+1
Id-Nr | Preis | Farbe | Gewicht | Höhe | Breite | ...
Das ganze für ca. ~100 Werte pro Produkt.
Workbook A kommt aus einer alten Datenbank, kann ich nicht bearbeiten, noch scheinen die gewünschten Merkmale (die in Workbook B übertragen werden sollen) via XML auslesbar zu sein. Also wurde das "per Hand" gemacht, was für Produktkataloge mit einer Stückzahl von >1000 ziemlich behindert ist.
Ich hab mir selbst ein paar Makros geschrieben, die Workbook A durchsuchen und Zielwörter in ein neues Arbeitsblatt schreiben. Die Zielwerte kann man dank S-Verweis/Vlookup relativ easy und zeiteffizient übertragen. Für sehr einfache Zahlenwerte (Höhe/Breite/Länge/Gewicht) funktioniert das super, in etwa so:
Syntax jetzt mal aus dem Kopf geschrieben, kann Fehler enthalten, funktioniert aber.
Das eigentliche Problem: Sachen wir Farben werden in tausend Variationen abgegeben (rot <> karmesin <> karmesinrot <> magenta <> magenta rot <> magenta rot / dunkelpink), und je nach "Fließtext" auch etwa als: "Farbe: rot" oder "rote Farbe" oder "rot lackiert". Die Hölle.
Weiterhin, es kann vorkommen, dass ich mehrwertige Einträge übernehmen soll, die im Workbook B in die gleiche Spalte sollen, etwa:
Zusatzaustattung darf enthalten: Stoppuhr, Pulsmesser, Reperaturwerkzeug, ... , Wert 50.
Die oben beschriebenen Daten stehen nun auch noch über drei Spalten verteilt, was noch behinderter ist.
Meine Lösungen sind ähnlich dem ersten Syntax, nur habe ich die Suchworte gleich in eine extra Spalte geschrieben, und lasse die mit einer For-Schleife nach und nach suchen und füge die Suchergebnisse dann nach Durchlauf in neue Spalten. Ein Extra-Makro kann mir dann die Spalten zusammenfügen, falls ich das denn will.
Der Haken: die inStr-Suche durfte ich auch mit Schleifen erweitern, falls der Zielwert häufiger oder falsch-positiv auftaucht, was durchaus der Realität entspricht, etwa könnte im Text stehen:
"Laufen Sie schon vor Scham rot an? Dann probieren Sie unser Laufband der Marke Forrest Gump. Erhätlich in schwarz oder silber!" - offensichtlich will ich rot nicht, sondern "schwarz, silber".
"Zwei Bremstypen: vorne Scheibenbremse, hinten Rücktrittsbremse - beide lösen die V-Brakes-Bremsen ab!" - zugegeben ein schlechtes Beispiel, will aber beide Werte, sollte ich nach "Bremse" suchen; V-Brakes will ich offensichtlich auch gar nicht drin haben.
Als Alternative habe ich zudem noch die Cells.find-Methode ausprobiert (statt inStr), die mir dann aber gleich die ganze Zelle mit dem Krimskrams außenrum vollspammen; d.h. ich darf dann auch noch manuell drüberschauen und ausbessern.
Irgendwie habe ich mich mit dem Ausbessern schon angefreundet, es geht einfach nicht anders. Allerdings: Gibt es irgendwelche Suchmethoden, die zeiteffizienter sind? Egal ob mit Cells.Find oder mit inStr dauert es bis zu 30 Minuten, wenn ich nach ~60 Suchbegriffen in 2000+ Zeilen suche. Ist zwar immer noch sehr viel schneller als die "alles per Hand-Methode", aber nicht wirklich befriedigend.
Leider eine relativ komplizierte Anfrage, ich bin mir nicht sicher, ob es verständlich rüberkommt. Noch kann ich (Datenschutz), die Tabellen anfügen. Im Grunde ist das Problem relativ einfach, auch bereits gelöst: Ich muss aus einem Workbook A Produktdaten in ein anderes Workbook B übertragen. Das Hauptproblem ist, dass Workbook B standardisiert ist, Workbook A aber aussieht wie Kraut und Rüben, in etwa so:
Workbook A:
Spalte 1 | Spalte 2 | Spalte 3 | Spalte 4 | Spalte 5
Id-Nr | Produktüberschrift | Fließtext (technische Details) | Fließtext (SEO-Text) | Fließtext (Sonstige Anmerkungen)
Workbook B:
Spalte 1 | Spalte 2 | Spalte n | ... Spalte n+1
Id-Nr | Preis | Farbe | Gewicht | Höhe | Breite | ...
Das ganze für ca. ~100 Werte pro Produkt.
Workbook A kommt aus einer alten Datenbank, kann ich nicht bearbeiten, noch scheinen die gewünschten Merkmale (die in Workbook B übertragen werden sollen) via XML auslesbar zu sein. Also wurde das "per Hand" gemacht, was für Produktkataloge mit einer Stückzahl von >1000 ziemlich behindert ist.
Ich hab mir selbst ein paar Makros geschrieben, die Workbook A durchsuchen und Zielwörter in ein neues Arbeitsblatt schreiben. Die Zielwerte kann man dank S-Verweis/Vlookup relativ easy und zeiteffizient übertragen. Für sehr einfache Zahlenwerte (Höhe/Breite/Länge/Gewicht) funktioniert das super, in etwa so:
Code:
dim i as long, j as long
dim suchwort as string
i = application.worksheetfunctions.countA(range("A:A"))
'Spalte A = id-nummern
suchwort = inputbox("Suchwort eingeben")
'i = id-nummern
for i = 1 to i
j = instr(cells(i,3), suchwort)
'spalte C / spalte 3 = suchwort kommt eigtl. nur im fließtext "technische Details" vor
if j > 0 then
worksheets(2).cells(i,1).value = cells(i,1)
worksheets(2).cells(i,2).value = Mid(cells(i,3), j, len(suchwort) + 5)
'fünf stellen sind für zahlen meist ausreichend
else
endif
next i
Syntax jetzt mal aus dem Kopf geschrieben, kann Fehler enthalten, funktioniert aber.
Das eigentliche Problem: Sachen wir Farben werden in tausend Variationen abgegeben (rot <> karmesin <> karmesinrot <> magenta <> magenta rot <> magenta rot / dunkelpink), und je nach "Fließtext" auch etwa als: "Farbe: rot" oder "rote Farbe" oder "rot lackiert". Die Hölle.
Weiterhin, es kann vorkommen, dass ich mehrwertige Einträge übernehmen soll, die im Workbook B in die gleiche Spalte sollen, etwa:
Zusatzaustattung darf enthalten: Stoppuhr, Pulsmesser, Reperaturwerkzeug, ... , Wert 50.
Die oben beschriebenen Daten stehen nun auch noch über drei Spalten verteilt, was noch behinderter ist.
Meine Lösungen sind ähnlich dem ersten Syntax, nur habe ich die Suchworte gleich in eine extra Spalte geschrieben, und lasse die mit einer For-Schleife nach und nach suchen und füge die Suchergebnisse dann nach Durchlauf in neue Spalten. Ein Extra-Makro kann mir dann die Spalten zusammenfügen, falls ich das denn will.
Der Haken: die inStr-Suche durfte ich auch mit Schleifen erweitern, falls der Zielwert häufiger oder falsch-positiv auftaucht, was durchaus der Realität entspricht, etwa könnte im Text stehen:
"Laufen Sie schon vor Scham rot an? Dann probieren Sie unser Laufband der Marke Forrest Gump. Erhätlich in schwarz oder silber!" - offensichtlich will ich rot nicht, sondern "schwarz, silber".
"Zwei Bremstypen: vorne Scheibenbremse, hinten Rücktrittsbremse - beide lösen die V-Brakes-Bremsen ab!" - zugegeben ein schlechtes Beispiel, will aber beide Werte, sollte ich nach "Bremse" suchen; V-Brakes will ich offensichtlich auch gar nicht drin haben.
Als Alternative habe ich zudem noch die Cells.find-Methode ausprobiert (statt inStr), die mir dann aber gleich die ganze Zelle mit dem Krimskrams außenrum vollspammen; d.h. ich darf dann auch noch manuell drüberschauen und ausbessern.
Irgendwie habe ich mich mit dem Ausbessern schon angefreundet, es geht einfach nicht anders. Allerdings: Gibt es irgendwelche Suchmethoden, die zeiteffizienter sind? Egal ob mit Cells.Find oder mit inStr dauert es bis zu 30 Minuten, wenn ich nach ~60 Suchbegriffen in 2000+ Zeilen suche. Ist zwar immer noch sehr viel schneller als die "alles per Hand-Methode", aber nicht wirklich befriedigend.
Zuletzt bearbeitet von einem Moderator:
