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

Kommas korrigieren

Kommas korrigieren
17.01.2014 11:45:53
Sven
Hallo,
ich hatte gestern meiner Frage schlecht beschrieben und möchte es jetzt nochmal tun.
Ich gebe häufig Text- und Dezimalzahlen in eine Zelle ein. Dabei habe ich manchmal im Eifer des Gefechts versehentlich zuviel oder zu wenig Leerzeichen.
Z.B.: Text,Text,5,50 €
oder: Text ,Text,5 ,50 €
Eine Korrektur sollte das bewirken:
Text, Text, 5,50 €
u.st. Befehl (von Gerd L) richtet mir zwar die Kommas aus, allerdings werden auch aus 5,50 € 5, 50 €.
Vielleicht kann mir jemand eine entsprechend weiterhelfen?
Danke und Gruß Sven
Private Sub Worksheet_Change(ByVal Target As Range) Dim objCell As Range, X As Variant, i As Integer On Error GoTo errExit For Each objCell In Target X = Split(objCell.Text, ",") If UBound(X) > 0 Then For i = 0 To UBound(X) X(i) = Trim$(X(i)) Next objCell.Value = Join(X, ", ") End If Next errExit: End Sub

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Kommas korrigieren
17.01.2014 12:07:37
EtoPHG
Hallo Sven,
Vielleicht mit einer kleinen Ergänzung:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim objCell As Range, X As Variant, i As Integer
On Error GoTo errExit
For Each objCell In Target
X = Split(objCell.Text, ",")
If UBound(X) > 0 Then
For i = 0 To UBound(X)
X(i) = Trim$(X(i))
Next
objCell.Value = Join(X, ", ")
For i = 2 To Len(objCell.Value) - 1
If Mid(objCell.Value, i, 2) = ", " And _
IsNumeric(Mid(objCell.Value, i - 1, 1)) And _
IsNumeric(Mid(objCell.Value, i + 2, 1)) Then
objCell.Value = Left(objCell.Value, i) & Mid(objCell.Value, i + 2, 999)
i = i - 1
End If
Next i
End If
Next
errExit:
End Sub
Gruess Hansueli

Anzeige
AW: Kommas korrigieren
17.01.2014 12:29:33
Sven
Hallo Hansueli,
danke, dass ist Spitze.
Nun hab ich wegen meiner Schusselichkeit wieder was vergessen. Es gibt auch so etwas:
Text,Text,5,50 €, Arbeitsbuch S. 4,5,6 ,Arbeitsbuch Nr. 4,5,6
und das müsste dann so sein:
Text,Text,5,50 €, Arbeitsbuch S. 4, 5, 6 ,Arbeitsbuch Nr. 4, 5, 6
Naja, ich glaub jetzt haste die Lust mit mir verloren....
Gruß Sven

AW: Kommas korrigieren
17.01.2014 12:36:03
EtoPHG
Hallo Sven,
Naja, ich glaub jetzt haste die Lust mit mir verloren....
Na ja, ich hatte nie Lust mit dir ;-)
Aber leider lassen sich jetzt keine konsistenten Regeln mehr an deinen Beispielen ableiten und somit kann ich nur raten an der Schusseligkeit zu arbeiten, statt mit VBA was zurechtzubiegen und dafür bequem und schusslig weiterzumachen.
Gruess Hansueli

Anzeige
AW: Kommas korrigieren
17.01.2014 15:43:01
hary
Moin Sven
Bin ueberhaupt nicht der RegEx Spezi. Bei diesem Code ist noch ein kleiner Fehler drin. Daher Frage auf offen. Trennt alles. Nur bei Arbeitsbuch S steht ArbeitsbuchS.
Vlt hilft dir das schon weiter.
Private Sub Worksheet_Change(ByVal Target As Range)
Dim arrTmp
Dim Regex As Object
Dim objMatch As Object
Dim raus As String
Dim strText As String
Dim objCell As Range
On Error GoTo errExit
For Each objCell In Target
strText = Replace(objCell, " ", "")
Set Regex = CreateObject("Vbscript.Regexp")
With Regex
.Pattern = "(\d+,\d+|\d+)€"
.Global = True
Set objMatch = .Execute(strText)
raus = objMatch(0).Value
End With
arrTmp = Split(strText, raus)
arrTmp(0) = Replace(arrTmp(0), ",", ", ")
arrTmp(1) = Replace(arrTmp(1), ",", ", ")
raus = Replace(raus, "€", " €")
objCell = arrTmp(0) & raus & " " & arrTmp(1)
Next
errExit:
End Sub

gruss hary

Anzeige
AW: Kommas korrigieren
17.01.2014 22:11:01
Sven
Hallo Harry,
danke, hab jetzt keine Zeit, melde mich später wieder.
Gruß Sven

AW: Kommas korrigieren
18.01.2014 00:21:38
Sven
N'abend Harry,
danke.
Lehrzeichen (außer am Beginn) müssten bestehen bleiben, bzw. auf eines reduziert werden.
Momentan ziehen sich mehrere Wörter zusammen. Die Zeile wird auch nur korrigiert, wenn das €-Zeichen vorhanden ist. Das ist aber nicht immer dabei.
Mir fehlt jeglicher Horizont um deinen Code zu analysieren oder die Kriterien zu ändern.
Ich hab schon versucht aus deinem Code etwas in Einzelschritten herauszubekommen, aber durch die For-Next - Schleifen ist das zu langwierig. Vielleicht kannst du etwas beschreiben.
Gruß
Sven

Anzeige
Kommas korrigieren
18.01.2014 20:23:24
Erich
Hi Sven,
schau dir mal diese Tabelle an. Die Prozedur hat jeweils aus der oberen Zeile die nächste produziert.
Zur eindeutigen Darstellung hier im Web habe ich alle Leerzeichen durch "^" ersetzt.
 B
1Text,Text,5,50^€,^Arbeitsbuch^S.^4,5,6^,Arbeitsbuch^Nr.^4,5,6
2Text,^Text,^5,50^€,^Arbeitsbuch^S.^4,^5,^6^,^Arbeitsbuch^Nr.^4,^5,^6
3 
4Text,Text,5,50^€,^Arbeitsbuch^S.^4,^5,^6^,Arbeitsbuch^Nr.^4,^5,^6
5Text,^Text,^5,50^€,^Arbeitsbuch^S.^4,^5,^6^,^Arbeitsbuch^Nr.^4,^5,^6
6 
7,abc
8,^abc
9 
10ab,cd
11ab,^cd
12 
13ab^,^^cd
14ab^,^^cd
15 
16a,b,c
17a,^b,^c
18 
193,4,5
203,^4,^5
21 
221,2,3€
231,^2,^3€
24 
251,23€/Std.
261,23^€/Std.
27 
281,23^^€/Tag
291,^23^^€/Tag
30 
31^^minus^1,^23^€/Monat
32^^minus^1,^23^€/Monat
33 
34^^plus^1,2,7,89€/Monat
35^^plus^1,^2,^7,89^€/Monat


Excel Tabellen im Web darstellen >> Excel Jeanie HTML 4
Welche dieser Beispiele laufen falsch? Gibt es weitere Beispiele, wo falsche Ergebnisse rauskommen?
Hier die Prozedur:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngC As Range, arS As Variant, ii As Integer, strE As String
Dim pp As Long
For Each rngC In Target
If rngC.Row Mod 3 = 2 Then                ' nur jede 3. Zeile - Test!
strE = Replace(rngC.Text, ", ", "§$&/")
arS = Split(strE, ",")
If UBound(arS) > 0 Then
Application.EnableEvents = False
strE = Join(arS, ", ")
ii = InStr(strE, "€")
Do While ii > 0
If ii > 4 Then
If Mid(strE, ii - 5, 5) Like "#, ##" Then
'                 strE = Left(strE, ii - 4) & Mid(strE, ii - 2)
strE = Left(strE, ii - 4) & Mid(strE, ii - 2, 2) _
& " €" & Mid(strE, ii + 1)
ElseIf Mid(strE, ii - 6, 6) Like "#, ## " Then
strE = Left(strE, ii - 5) & Mid(strE, ii - 3)
End If
End If
ii = InStr(ii + 1, strE, "€")
Loop
strE = Replace(strE, "§$&/", ", ")
rngC = strE
End If
End If                                    ' nur jede 3. Zeile - Test!
Next
Application.EnableEvents = True
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Kommas korrigieren
19.01.2014 13:16:16
Sven
Hallo Erich,
danke für die viele Mühe.
Vorab: Wenn (aus Versehen) mehr als ein Leerzeichen eingetippt wurden, sollte daraus nur eines entstehen. Das ist noch nicht berücksichtigt.
Text^^^Text zu: Text^Text oder
Text,^^^Text zu: Text,^Text
Text^^,^^^Text zu: Text,^Text
1,23^^^€ wird zu 1,23 € (da klappt es)
Bei dieser evt. auftretenden Konstruktionen sehe ich ein Problem durch das Einfügen der Leerzeichen hinter den Kommas: Aus: BuchS.5,6,Nr.7,1,67€ würde wohl: Buch^S.^5,^6,^Nr.^7,^1,^67^€ werden, statt Buch^S.^5,^6,^Nr.^7,^1,67^€. Ich habe manchmal Seitenzahlen und Geldbeträge in einer Zelle.
Ich würde den Code mal in meine Mappe einbauen um zu probieren. Was muss da geändert werden?
If rngC.Row Mod 3 = 2 Then ' nur jede 3. Zeile - Test!
Gruß Sven

Anzeige
AW: Kommas korrigieren
19.01.2014 15:03:24
Erich
Hi Sven,
ja, das mit den doppelten Leerzeichen habe ich jetzt noch eingebaut, Code ist weiter unten.
Deine Zeile
1,23^^^€ wird zu 1,23 € (da klappt es)
verstehe ich nicht. Bisher wurde aus
1,23^^^€ der Text
1,^23^^^€
Das Beispiel mit BuchS verstehe ich auch nicht. Aus
BuchS.5,6,Nr.7,1,67€ wurde bisher der Text
BuchS.5,^6,^Nr.7,^1,67^€
Du schreibst aber
Buch^S.^5,^6,^Nr.^7,^1,^67^€ bzw.
Buch^S.^5,^6,^Nr.^7,^1,67^€
Woher sollte hinter "Buch" und hinter "S." ein Leerzeichen kommen? Wie haben uns bislang
nur um Kommas und Leerzeichen gekümmert. Buch oder S und Punkt interessierten bislang nicht.
"BuchS.5" ist ein ganz normaler Text - wie "pro7"
Wenn du die Einschränkung auf jede 3. Zeile rausnehmen willst, dann lösche die beiden Zeilen,
die mit "' nur jede 3. Zeile - Test!" kommentiert sind.
Hier der neue Code:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rngC As Range, arS As Variant, ii As Integer, strE As String
Dim pp As Long
For Each rngC In Target
If rngC.Row Mod 3 = 2 Then                ' nur jede 3. Zeile - Test!
strE = Replace(rngC.Text, ", ", "§$&/")
arS = Split(strE, ",")
If UBound(arS) > 0 Then
Application.EnableEvents = False
strE = Join(arS, ", ")
ii = InStr(strE, "€")
Do While ii > 0
If ii > 4 Then
If Mid(strE, ii - 5, 5) Like "#, ##" Then
'                 strE = Left(strE, ii - 4) & Mid(strE, ii - 2)
strE = Left(strE, ii - 4) & Mid(strE, ii - 2, 2) _
& " €" & Mid(strE, ii + 1)
ElseIf Mid(strE, ii - 6, 6) Like "#, ## " Then
strE = Left(strE, ii - 5) & Mid(strE, ii - 3)
End If
End If
ii = InStr(ii + 1, strE, "€")
Loop
strE = Replace(strE, "§$&/", ", ")
rngC = strE
End If
End If                                    ' nur jede 3. Zeile - Test!
Next
Application.EnableEvents = True
End Sub
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Kommas korrigieren
19.01.2014 20:59:09
Sven
Hallo Erich,
wenn ich:
If rngC.Row Mod 3 = 2 Then ' nur jede 3. Zeile - Test!
und:
End If ' nur jede 3. Zeile - Test!
lösche, wird von:
Do While ii > 0
nach:
strE = Replace(strE, "§$&/", ", ")
übersprungen. Deshalb klappt's erstmal noch nicht. Nun weiß ich nicht, ob ich da was falsch mache.
So etwas, wie BuchS.5 kannte bis jetzt noch nicht. Bei mir kann nur z.B. "fröhl. Klarinette" S.6 Nr. 7,8,9 (oder 7-9) vorkommen. Oder Dapper S. ..... . Manchmal steht zwischendrin z.B. 5,60 €.
Gruß
Sven

Anzeige
AW: Kommas korrigieren
20.01.2014 01:12:14
Erich
Hi Sven,
die beiden Zeilen mit "nur jede 3. Zeile - Test!" steuern, ob eine Zeile (Row) bearbeitet wird oder nicht.
Das hat überhaupt nichts zu tun mit der Do-Schleife, die von ii abhängt. ii ist die Position des €-Zeichens.
Wenn kein € im Text vorkommt, ist ii=0, und die Schleife wird nicht durchlaufen.
Meintest du das mit "übersprungen"?
"Deshalb klappt's erstmal noch nicht." - Bitte: Was genau klappt denn nicht? Beispiel?
"So etwas, wie BuchS.5 kannte bis jetzt noch nicht."
Sorry, aber das habe ich mir nicht aus den Fingern gesogen.
"BuchS.5" ist ein Beispiel aus deinem Beitrag vom 19.01.2014 13:16:16. In diesem Beitrag
hast du die Leerzeichen nach "Buch" und "S." generieren lassen - was mich wiederum wunderte.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Anzeige
AW: Kommas korrigieren
20.01.2014 09:30:43
Sven
Hallo Erich,
<"i>Meintest du das mit "übersprungen"?</i">
Der Code nach:
If UBound(arS) > 0 Then
bis zum letzten end if
Hab aber gerade gemerkt, es hängt von der Position des Kommas vor dem € ab.
Arbeits)buchS ist schon vorher kreiert worden (in Harys Antwort 17.1.). Ich brauche es aber nicht.
<i>Was genau klappt denn nicht? Beispiel?</i>
Ich sag mal, was klappt: Die fehlenden Leerzeichen werden genau richtig ergänzt.
Hier nochmal ein Beispiel, genau wie es in meiner Praxis vorkommt. Ich habe übertrieben zu viele Leerzeichen eingefügt. Auf Blatt 2 habe ich es korrigiert geschrieben.
https://www.herber.de/bbs/user/88886.xls
Gruß Sven

unklar
20.01.2014 13:11:11
Erich
Hi Sven,
wegen dieser beiden Texte hättest du doch wirklich keine Mappe hochladen müssen.
^ statt Leerzeichen reicht für eine klare Darstellung der Texte hier aus.
Wichtiger ist, dass du dich mit dir selbst einigst, was wann rauskommen soll.
Aus inette^^S.^^^14 soll werden: inette^S.14
Aus Dapper^^^S.^^45 soll werden: Dapper^S.^45
Wonach richtet sich, dass hinter "S." mal ein Leerzeichen stehen bleiben soll, mal nicht?
Aus Nr.^4 soll werden: Nr.^4
Aus Nr.^^17 soll werden: Nr.17
Wonach richtet sich, dass hinter "Nr." mal ein Leerzeichen stehen bleiben soll, mal nicht?
Eine (jetzt für mich) neue Anfoderung ist, dass
aus 17^^-^^^20 jetzt 17-20 werden soll, also gar kein Leerzeichen stehen bleiben soll.
Normal käme derzeit 17^-^20 raus.
Was sollte jetzt z. B. aus 17^^-^^^20,15^€ werden?
Was sollte jetzt z. B. aus Rabatt^^-^^^20,15^€ werden?
Solange das Ziel nicht klar ist, lohnt keine Programmierung... :-(
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

Seine Schluderrigkeit eliminieren, ...
20.01.2014 16:14:16
EtoPHG
sei das Ziel, Erich,
So hat es Sven irgendwann am Anfang des Threads 'definiert', worauf ich dann das Handtuch geworfen habe. Zurecht, wie ich glaube, denn ich bin überzeugt, dass er immer noch was finden wird was nicht passt; nur weil er sich ver^.-.^tippt... ;-)
Gruess Hansueli

AW: Kommas korrigieren
20.01.2014 12:16:33
Dani
Hallo Sven,
hier ein Tipp, wie du deine Schusseligkeit vermeiden kannst. Beschränke die mögliche Eingabe in die Zellen über das Tab "Daten" und die Funktion "Datenüberprüfung".
Hier stellst du für jede Spalte den Datentyp ein, der vorkommen darf. Bei den EUR Beträgen z.B. Zahl (und formatieren die Spalte als "Währung").
Dann musst du dir nach der ganzen Korrigiererei in Zukunft keine Gedanken mehr machen.
Viele Grüße,
Dani

AW: Kommas korrigieren
20.01.2014 12:41:32
Sven
Hallo Dani,
die Funktion "Datenüberprüfung" gibt es bei mir nicht. Hab alles aufgeklappt.
Gruß Sven

Gültigkeit
20.01.2014 12:47:32
Erich
Hi Sven,
wenn du unter "Datenüberprüfung" nichts findest, such doch mal nach "Gültigkeit" - auch in der Excel-Hilfe.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich

AW: Gültigkeit
20.01.2014 12:52:53
Sven
Hallo Erich,
gefunden. Aber das hilft mir nicht so wahrlich weiter, weil es nur manche Spalten betrifft.
Gruß
Sven

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige