Excel Makro für die SN-Korrektur

Haben Sie Vorschläge, Kommentare, Ideen...?

Moderators: Licht & Feuer, Miles66

Post Reply
User avatar
cmdr.bond
Euro-Expert in Training
Euro-Expert in Training
Posts: 480
Joined: Sat Mar 11, 2006 4:50 pm
Location: Krefeld, NRW, Germany

Excel Makro für die SN-Korrektur

Post by cmdr.bond »

Hi @all!

de-bs-euro und ich benutzen zur Erfassung der SN einen Stiftscanner. Der ist mit etwas Übung ganz zuverlässig im Erkennen.
Allerdings neigt er zu einer Reihe von immer denselben Fehlern, zum Beispiel sieht er eine 1 schon mal als Q,q, oder " und eine 0 als ß. Derlei Fehler lassen sich anschließend per Makro ausbügeln.

Jetzt kommen die Gemeinheiten: leider sieht er aber auch regelmäßig das S als 5 an und das Z als 2. Wie nun erkläre ich, daß das Makro den Fehler nur korrigieren darf, wenn er an der ersten Stelle der Zeichenkette passiert? Oder umgekehrt, wenn die 7 mal wieder ein T geworden ist, wie erkläre ich, daß das nur für die Stellen 2-12 gilt?

Gedanklich habe ich zumindest für die Länderkennung bereits ein Gerüst zusammen (oder geht das einfacher?)
Zz = ActiveSheet.UsedRange.Rows.Count
For l = 1 To Zz
Sn = [erstes Zeichen der Zeichenkette] in Feld [Spalte D + I]
xmal If Sn =... Then Neu = ...
Else Sn = Neu
Ausdruck Neu + Rest der Zeichenkette
Next I

Wie floht man anschließend den Rest der SN und ersetzt die Fehler nach anderen Kriterien?

Und wie kann man nach all den Korrekturen die Zeichenketten auf 12 Zeichen kürzen? Ich kriege gelegentlich schon mal ein paar Zeichen mehr raus, und die zusätzlichen sind immer Müll.

Hier das bisherige Makro... läßt sich das auch verkürzen? Das stammt aus einer Aufnahme. Die LookAt und MatchCase Angaben, müssen die in jeder Zeile sein?

Sub Listenkorrektur()
'
' für die häufigsten Scanfehler
'
Columns("D:D").Select
Selection.Replace What:="Q", Replacement:="1", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="q", Replacement:="1", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="""", Replacement:="1", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="ß", Replacement:="0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="O", Replacement:="0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="o", Replacement:="0", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="E", Replacement:="2", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False
Selection.Replace What:="T", Replacement:="7", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False 'der Fehler kommt häufiger vor als irische Scheine
End Sub
cmdr.bond
Platz 1 in Krefeld mit freundlicher Unterstützung der Postbank.
User avatar
hadibe
Euro-Master
Euro-Master
Posts: 1292
Joined: Sat Jul 02, 2005 9:53 am
Location: Berlin
Contact:

Post by hadibe »

Das dürfte möglich sein wenn du, statt die ganze Tabelle zu ersetzen, jede Zelle einzeln in die Hand nimmst und diesen Inhalt mit Links(), Rechts() oder Teil() auswertest.

Ich schick dir mal mein Serienmakro zum probieren.
User avatar
cmdr.bond
Euro-Expert in Training
Euro-Expert in Training
Posts: 480
Joined: Sat Mar 11, 2006 4:50 pm
Location: Krefeld, NRW, Germany

Post by cmdr.bond »

Moin, hadibe,

danke für das Makro, da lese ich mich beizeiten mal rein.

Kann man die Funktion Ersetzen auch auf ein Ergebnis aus Links() oder Teil () anwenden? Oder sollte ich mit If Then arbeiten?
cmdr.bond
Platz 1 in Krefeld mit freundlicher Unterstützung der Postbank.
User avatar
hadibe
Euro-Master
Euro-Master
Posts: 1292
Joined: Sat Jul 02, 2005 9:53 am
Location: Berlin
Contact:

Post by hadibe »

Anscheinend nicht, sondern nur auf den kompletten Zellinhalt; If Then ist wohl besser.
User avatar
Economist
Euro-Regular
Euro-Regular
Posts: 169
Joined: Thu Jan 26, 2006 9:44 am
Location: Dresden, Germany

Post by Economist »

Hallo,

also versuch mal die Replace Funktion.
z.B.
Zelle = Replace(Zelle, ß, 0, 1, 12)

wobei du für Zelle eben den Ort wo die SN steht einsetzen musst. Das ß wird ersetzt durch die 0 und dass ganze passiert von der Stelle 1 an für die nächsten 12 Stellen der Zeichenkette.

Dementspechend für 7 und T:
Zelle = Replace(Zelle, 7, T, 1, 1)
nur die erste Stelle der Zeichenkette wird betrachtet.

Nur für die Stellen 2-12 geht es nicht so einfach weil wenn du erst ab Stelle 2 replaced wird Dir die erste Stelle ganz gelöscht. Also müsstest Du sie vorher trennen und danach wieder zusammenfügen. Sollte aber mit left() und right() wie schon erwähnt auch möglich sein.

Genauso funktioniert es die Zeichenketten nach der 12. Stelle abzuschneiden:
Zelle = left(Zelle, 12) und es werden nur noch die ersten 12 Zeichen von links ausgegeben.

Sorry falls das zu verwirrend war, aber hab gerade keine Zeit für längere Erklärung. Aber wie die einzelnen Befehle funktionieren kann man auch schnell googlen.

MfG
Post Reply

Return to “Diskussionen zur Site und zum Euro-Tracking (Deutsch)”