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
Excel Makro für die SN-Korrektur
Moderators: Licht & Feuer, Miles66
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
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