Schau mal ob du damit etwas anfangen kannst:
Code vb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
| Sub zahl_format()
'Bildschirmanzeige ausschalten
Application.ScreenUpdating = False
'letzte Zeile in Spalte A suchen
zeilen% = Tabelle1.Cells(Rows.Count, 1).End(xlUp).Row
'letzte Spalte in Zeile 1 suchen
spalten% = Tabelle1.Cells(1, Columns.Count).End(xlToLeft).Column
'alle Spalten durchlaufen
For s% = 1 To spalten%
'alle Zeilen durchlaufen
For z% = 1 To zeilen%
'wenn Komma in der Zelle vorkommt
If InStr(1, Tabelle1.Cells(z%, s%), ",") Then
'Teil links inklusive Komma
links$ = Left(Tabelle1.Cells(z%, s%), InStr(1, Tabelle1.Cells(z%, s%), ","))
'Teil rechts vom Komma
rechts$ = Mid(Tabelle1.Cells(z%, s%), InStr(1, Tabelle1.Cells(z%, s%), ",") + 1, Len(Tabelle1.Cells(z%, s%)))
'Wert formatieren und in Zelle eintragen
Tabelle1.Cells(z%, s%) = links$ & rechts$ & String(3 - Len(rechts$), "0")
End If
Next z%
Next s%
'Bildschirmanzeige wieder einschalten
Application.ScreenUpdating = True
End Sub |
Da ich den genauen Ablauf nicht kenne wie du die Daten in Excel einliest, kann ich dir jetzt nicht sagen wo du das Makro am besten einbindest. Die Umwandlung klappt soweit ich es jetzt getestet habe so aber.
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
VORSICHT: Dinge die per Makro geändert wurden lassen sich nicht mit "Bearbeiten Rückgängig" zurücksetzten!!
Ich habe es in meinem Beispiel alles auf "Tabelle1" geschrieben, dort werden also die Änderungen gemacht.
Um dir weiter zu helfen hätte ich jetzt erst 2 Fragen:
1) wie "sensibel" sind die Daten den mit denen du da arbeitest?
2) kannst du mir die Datei schicken und kannst du sie dann als 2000-er Version speichern?
Ansonsten ändere alles was jetzt "Tabelle1" heißt in "ActiveSheet" und (sofern nicht eh schon geschehen) kopiere den Code in das Register "DieseArbeitsmappe", den er darf nicht innerhalb eines bestimmten Arbeitsblattes stehen.
Dann kannst du diesem Makro eine Tastenkombination zuweisen und es immer wenn du in einer bestimmten Tabelle stehst darüber starten.
Beim ermitteln der letzten Zeile/Spalte endet das Makro immer wenn es auf eine leere Zelle trifft! Es du mit dieser Abbruchbedingung klar kommst musst du testen.
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
Freut mich wenn es geklappt hat.
Ansonsten hätte ich dir meine eMail Adresse per PN geschickt, dann hätten wir es so gemacht.
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
Dazu musst du die zwei Zeilen in denen die letzte Zeile bzw. die letzte Spalte ermittelt wird so ändern:
Code vb:
1
2
3
4
5
| 'letzte Zeile in Spalte A suchen
zeilen% = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
'letzte Spalte in Zeile 1 suchen
spalten% = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column |
Jetzt ist es egal ob es irgendwo dazwischen leere Zellen gibt.
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
Sorry bin ein bisschen spät dran heute, dafür habe ich eine Lösung für dich.
Neu ist hier nur das die Anzahl der vorhandenen Tabellen ermittelt werden und eine weitere For/Next-Schleife die dann eben nacheinander alle Tabellen durchläuft.
Code vb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
| Sub zahl_format()
'Bildschirmanzeige ausschalten
Application.ScreenUpdating = False
'zuerst die Anzahl der Tabellen ermitteln ** NEUE ZEILE **
tabellen% = ActiveWorkbook.Sheets.Count
'alle Tabellen durchlaufen ** NEUE FOR/NEXT-SCHLEIFE **
For t% = 1 To tabellen%
ActiveWorkbook.Sheets(t%).Activate
'letzte Zeile in Spalte A suchen
zeilen% = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
'letzte Spalte in Zeile 1 suchen
spalten% = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
'alle Spalten durchlaufen
For s% = 1 To spalten%
'alle Zeilen durchlaufen
For z% = 1 To zeilen%
'wenn Komma in der Zelle vorkommt
If InStr(1, ActiveSheet.Cells(z%, s%), ",") Then
'Teil links inklusive Komma
links$ = Left(ActiveSheet.Cells(z%, s%), InStr(1, ActiveSheet.Cells(z%, s%), ","))
'Teil rechts vom Komma
rechts$ = Mid(ActiveSheet.Cells(z%, s%), InStr(1, ActiveSheet.Cells(z%, s%), ",") + 1, Len(ActiveSheet.Cells(z%, s%)))
'Wert formatieren und in Zelle eintragen
ActiveSheet.Cells(z%, s%) = links$ & rechts$ & String(3 - Len(rechts$), "0")
End If
Next z%
Next s%
Next t%
'Bildschirmanzeige wieder einschalten
Application.ScreenUpdating = True
End Sub |
Es grüßt ebenfalls aus BaWü
Thomas
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.
Der Fehler wird wohl immer dann ausgelöst wenn eine Zahl mehr als 3 Stellen nach dem Komma hat, was ja eigentlich nicht sein dürfte.
Für diesen Fall (oder wenn sonst ein Fehler auftritt) habe ich den Code nochmals geändert. Tritt ein Fehler auf, wird am Ende eine Meldung angezeigt und der Name der Tabelle sowie die Zeile und die Spalte ausgegeben.
Die Schleife ist jetzt auch gleich so geändert das erst in Tabelle 3 begonnen wird.
Code vb:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
| Sub zahl_format()
Dim blatt()
Max% = 0
fehler% = 0
On Error GoTo format_fehler
'Bildschirmanzeige ausschalten
Application.ScreenUpdating = False
'zuerst die Anzahl der Tabellen ermitteln ** NEUE ZEILE **
tabellen% = ActiveWorkbook.Sheets.Count
'alle Tabellen durchlaufen ** NEUE FOR/NEXT-SCHLEIFE **
For t% = 3 To tabellen%
ActiveWorkbook.Sheets(t%).Activate
'letzte Zeile in Spalte A suchen
zeilen% = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
'letzte Spalte in Zeile 1 suchen
spalten% = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column
'alle Spalten durchlaufen
For s% = 1 To spalten%
'alle Zeilen durchlaufen
For z% = 1 To zeilen%
'wenn Komma in der Zelle vorkommt
If InStr(1, ActiveSheet.Cells(z%, s%), ",") Then
'Teil links inklusive Komma
links$ = Left(ActiveSheet.Cells(z%, s%), InStr(1, ActiveSheet.Cells(z%, s%), ","))
'Teil rechts vom Komma
rechts$ = Mid(ActiveSheet.Cells(z%, s%), InStr(1, ActiveSheet.Cells(z%, s%), ",") + 1, Len(ActiveSheet.Cells(z%, s%)))
'Wert formatieren und in Zelle eintragen
ActiveSheet.Cells(z%, s%) = links$ & rechts$ & String(3 - Len(rechts$), "0")
End If
Next z%
Next s%
Next t%
'Bildschirmanzeige wieder einschalten
Application.ScreenUpdating = True
If fehler% > 0 Then
fehlertext$ = "Es traten insgesamt " & fehler% & " Fehler auf." & Chr$(13) & Chr$(13)
For a% = 0 To UBound(blatt)
fehlertext$ = fehlertext$ & blatt(a%) & Chr$(13)
Next a%
MsgBox fehlertext$
End If
Exit Sub
format_fehler:
fehler% = fehler% + 1
ReDim Preserve blatt(Max%)
blatt(Max%) = ActiveSheet.Name & " (Zeile " & z% & " - Spalte " & s% & ")"
Max% = Max% + 1
Resume Next
End Sub |
Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.
Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.