250 Aufrufe
Gefragt in Tabellenkalkulation von saskia-mertens Einsteiger_in (18 Punkte)
Hallo Zusammen,

ich habe ein Problem, welches ich hoffentlich mit eurer Hilfe lösen kann. Worum geht es?

Ich ziehe in regelmäßigen Abständen "Kontaktadressen" aus unserem ERP-System, die es weiter zu verarbeiten gilt und an den Dienstleister (Druckerei) übermittelt werden. Jetzt ist die Druckerei an mich herangetreten, ob es nicht möglich wäre, die ausländischen Ländernamen in Großbuchstaben zu wandeln, da die Post der Druckerei Stress macht. Jetzt muss man wissen, das der Export dynamisch ist, sprich die Spalten mit den Ländernamen mal in Spalte S sind, mal in V oder sonst wo. Aber eben nicht immer in einer festdefinierten Spalte zu finden sind. Eine Idee, die mir vorschwebt wäre die, dass ich eine "Referenztabelle" habe, die alle zu berücksichtigenden Ländernamen enthält (die kann ich Problemlos aus dem ERP-System ziehen) und ein ein intelligentes Makro, dass die Exportdatei komplett durchsucht und alle "gefundenen" Werte durch die der Referenztabelle ersetzt. Aber leider habe ich absolut keine Ahnung, wie ich das in VBA(?) angehen kann.

Ich freue mich auf Lösungsvorschläge und sage schon einmal ein herzliches Dankeschön fürs Lesen/Beitragen!

Schöne Grüße
Saskia

7 Antworten

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Saskia,

falls die Export-Datei Überschriften hat, könnte man nach der Überschrift suchen und hätte dann die Spalte.

Aber das wäre wohl zu einfach.

Du kannst die Daten aus der Referenztabelle und die aus der Exporttabelle jeweils in ein eigenes Array einlesen und dann überprüfen, welche Daten aus der Referenztabelle du in der Exportdatei findest und dann entsprechend den Begriff in Großbuchstaben umwandeln und danach in die Exportdatei zurückschreiben.

Welche VBA-Kenntnisse hast du den überhaupt?

Gruß

M.O.
0 Punkte
Beantwortet von saskia-mertens Einsteiger_in (18 Punkte)

Oh je, das klingt kompliziert - ich weiß wie ich ein Makro aufzeichnen kann und wie ich fertige einbinden kann. Auch eine einzelne Zelle/Spalte ansprechen bekomme ich hin. Aber dann hört es auch schon auf. Aber ich bin neugierig und will es gerne verstehen. Ich schaue mal, wie weit ich mit Deiner Information (Arrays einlesen) weiterkomme. Da ich nie vorhersagen kann wann die Daten in der Exportdatei aufhören bzw. es gibt auch vielel "Leerzellen" möchte ich sichergehen, dass das Makro den Umstand abfängt, indem es fragt, wo die erste Zelle beginnt und wo die letzte aufhört und damit die komplette Tabelle erfasst.

Könntest Du mir dankenswerterweise eine Starthilfe geben? Oder ist das zuviel Aufwand?
In jedem Fall Danke ich dir recht herzlich.

VG
Saskia

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Bearbeitet von m-o

Hallo Saskia,

leider stehen die Ländernamen nicht nur in einer Spalte und wenn ich die Adresse in London sehe, dann gibt es auch nicht immer Postleitzahlen vor den Städten, sonst könnte man das prüfen.

Sind die Ländernamen nur in den Spalten mit den Überschriften LA Adrzeile4 und LA Adrzeile5?

Wenn du noch nicht tiefer in VBA eingestiegen bist, dann ist das mit den Arrays etwas schwierig zu verstehen. Hier habe ich in einem anderen Thread etwas dazu geschrieben: Klick mich!

Wenn ich mir das so ansehe, wird das am Einfachsten mit Suchen und Ersetzen zu lösen sein.

Ich kann dir eine Starthilfe geben wink.

Ich werde mal etwas basteln und dann hier einstellen.

Gruß

M.O.

0 Punkte
Beantwortet von saskia-mertens Einsteiger_in (18 Punkte)

Guten Morgen M.O.

erste einmal herzlichen Dank für deine Hilfe. Die Ländernamen sind leider auch nicht immer in den oben benannten Spalten, sondern könnten je nach Export auch woanders stehen. Dazu kommt noch die Schwierigkeit, das je nach Export die Spaltenbeschriftung eine andere ist.

Eine Bitte habe ich noch, bitte nicht allzu viel Zeit und Kraft investieren. Wenn die Dinge so sind wie sie sind, dann muss man das auch mal so hinnehmen. Dann muss der Dienstleister wohl oder übel selber sehen, wie er sich die Datei zurecht bastelt. Meine anfängliche (naive) Idee war ja, dass ein Art "Scanner" über das gesamte Tabellenblatt läuft (unabhängig davon wie die Spaltenbezeichnung lautet) und schaut, ist das Wort "Österreich" in der Tabelle vorhanden. Wenn ja, dann ersetze Sie mit dem Wort ÖSTERREICH aus der Referenztabelle. 

Ich habe so oder so viel aus dem Forum an Hilfe für mich gewinnen können und viele Lösungsvorschläge von anderen Usern für mich adaptieren können. An dieser Stelle ein dickes Dankeschön an Dich und alle anderen Helfer, die das alles unentgeltlich machen!

Schöne Grüße
Saskia

0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Saskia,

dann bleibt ja gar nichts anderes übrig, als das ganze Blatt zu überprüfen.

Wie gesagt, ich bastel dir mal etwas (das geht relativ schnell) und lade dann eine Beispieldatei hoch.

Gruß

M.O.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
ausgewählt von saskia-mertens
 
Beste Antwort

Hallo Saskia,

anbei mal eine kleine Beispieltabelle: Download

Und hier der Code:

Sub Laender_gross()
Dim arrReferenz As Variant
Dim lngLetzte As Long
Dim rngSuche As Range
Dim r As Long

'Referenzländer in Array einlesen - Name des Arbeitsblatts ggf. anpassen
With Worksheets("Referenz")
 'letzte Zeile in Spalte A ermitteln
 lngLetzte = .Cells(Rows.Count, 1).End(xlUp).Row
 'Array redimensionieren
 ReDim arrReferenz(lngLetzte)
 'Daten aus Spalte A einlesen
 arrReferenz = .Range("A1:A" & lngLetzte)
End With

'Suchbereich festlegen
Set rngSuche = ActiveSheet.UsedRange
'alle Referenzländer durchlaufen
For r = LBound(arrReferenz) To UBound(arrReferenz)
  'Land suchen und in Großbuchstaben schreiben
  rngSuche.Replace What:=arrReferenz(r, 1), Replacement:=UCase(arrReferenz(r, 1)), LookAt:=xlPart, _
  SearchOrder:=xlByColumns, MatchCase:=False, SearchFormat:=False, _
  ReplaceFormat:=False
Next r

Set rngSuche = Nothing

End Sub


Beachte bitte folgendes:

Die Referenzländer müssen im Tabellenbaltt "Referenz" in Spalte A ab A1 stehen (ohne Überschrift). Ggf. musst du im Makro den Namen des Blattes anpassen, wenn du den Blattnamen änderst.

Kopiere die Daten in die Arbeitsmappe mit der Referenzliste und starte das Makro von dem Tabellenblatt aus, in dem die Ländernamen in Großbuchstaben geändert werden sollen. Hier ist der Name des Tabellenblatts egal.

Gruß

M.O.

0 Punkte
Beantwortet von saskia-mertens Einsteiger_in (18 Punkte)

Lieber M.O.,

ich kann Dir gar nicht sagen, wie glücklich ich bin. Tausend Dank! :)

Ich habe es gerade mit einer Datei getestet und es funktioniert prima:

Nochmals, vielen, vielen Dank!

Schöne Grüße
Saskia

...