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

Replace mit Platzhalter

Replace mit Platzhalter
Uschi
Hi,
ich möchte mittels VBA Datumswerte, die in Spalte D stehen, über Suchen/Ersetzen in den Monatsnamen umwandeln.
Dazu habe ich mittels Recorder das folgende Makro aufgezeichnet:
Sub Macro1()
Columns("D:D").Select
Selection.Replace What:="?.04.2011", Replacement:="April", LookAt:=xlPart _
, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
Selection.Replace What:="?.03.2011", Replacement:="March", LookAt:=xlPart _
, SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

Während ich das Makro aufzeichne, funktioniert Suchen/Ersetzen auch. Wenn ich aber das Makro anschließend starte, wird nichts ersetzt.
Ich hab das Ganze auch mit "*" statt "?" probiert, das klappt aber auch nicht.
Woran liegt's?
Vielen Dank schon mal für Eure Hilfe.
LG
Uschi

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Replace mit Platzhalter
22.03.2011 10:40:08
Michel2010
Warum änderst Du nicht einfach das Format der Zellen so ab das die Monatsnamen angezeigt werden?
AW: Replace mit Platzhalter
22.03.2011 10:43:39
Uschi
Das bringt mir nichts, da ich auf einem anderen Blatt Werte über Summenprodukt ausgebe, wo nach dem Monatsnamen gesucht wird. Wenn ich nur das Format änder, ist intern ja immer noch das komplette Datum vorhanden.
ohne Replace
22.03.2011 10:49:07
Matthias
Hallo
probier mal:
Bereich markieren
Dim c
For Each c In Selection
c.Value = Format(c.Value, "MMMM")
Next
Statt Selection kannst Du auch Deinen Bereich angeben z.B Range("D1:D100")
Dann brauchst Du auch den Bereich nicht markieren
Gruß Matthias
Anzeige
AW: ohne Replace
22.03.2011 10:56:15
Uschi
Super, das klappt.
Vielen Dank Matthias.
:-)))
besser so ...
22.03.2011 10:59:00
Matthias
Hallo
Im Fall das noch andere Daten in der Spalte sind
Dim c
For Each c In Selection
If IsDate(c) And c.HasFormula = False Then c.Value = Format(c.Value, "MMMM")
Next
Das schließt Formeln und Zellen ohne Datum aus.
Gruß Matthias
AW: besser so ...
22.03.2011 11:20:51
Uschi
Ok, Danke.
Ist aber nicht nötig. In der Spalte stehen nur Datumswerte.
Dauert übrigens ewig, bis das Makro durch ist (paar und 700 Zeilen). Aber man kann ja in der Zwischenzeit Kaffee trinken :-))
wieso 700 Zeilen ?
22.03.2011 11:45:14
Matthias
Hallo
oder meinst Du 700 Zellen (in Spalte "D")
Ich hab das jetzt mit dem Bereich("D1:D6000") getestet. Das waren weniger als 2 Sekunden
In jeder Zelle stand ein Datum.


etwas schneller gehts so:
Dim c
Application.ScreenUpdating = False
For Each c In Range("D1:D6000") 'Bereich anpassen
If IsDate(c) And c.HasFormula = False Then c.Value = Format(c.Value, "MMMM")
Next
End Sub
Gruß Matthias
Anzeige
AW: wieso 700 Zeilen ?
22.03.2011 12:03:02
Uschi
Nee, dauert ewig.
Ich hab Deinen Code kopiert auf D6:D800 geändert und es dauert über 2 Minuten.
Aber egal, hauptsache es läuft.
LG
Uschi
dann probier das ...
22.03.2011 12:20:14
Matthias
Hallo
Das kann doch niemals 2 min. dauern.
Da läuft noch ein anderer Code mit.
Wahrscheinlich Worksheet_Change - Ereignisse
schalte die vorher ab
Dim c
Application.ScreenUpdating = False
Application.EnableEvents = False
For Each c In Range("D6:D800")
If IsDate(c) And c.HasFormula = False Then c.Value = Format(c.Value, "MMMM")
Next
Application.EnableEvents = True
Aber wenn Du damit zufrieden bist, will ich Dich nun nicht weiter drängen.
Gruß Matthias
Anzeige
AW: dann probier das ...
22.03.2011 13:11:59
Uschi
Das hat nun so ca. eine halbe Minute gebracht. Also statt 2 Minuten "nur noch" 1,5.
Und es ist jetzt nicht so, daß ich noch mit nem alten Commodore oder so arbeite ;-) (1,95 GB RAM, 2,33Ghz)
Kann es daran liegen, daß ich das Modul nicht im eigentlichen Workbook habe, sondern in der Personal.xlsb?
Aber egal. Ich lasse das Makro im Hintergrund laufen und mache solange was Anderes.
Du hast mir in jedem Fall sehr geholfen.
Danke für Deine Hilfe.
Vielleicht interessiert Dich das auch: ich hab es geschafft, das Format auf Englisch anzupassen:
If IsDate(Zelle) And Zelle.HasFormula = False Then Zelle.Value = WorksheetFunction.Text(Zelle, "[$-409]MMMM;@")
(Geschwindigkeit habe ich aber ohne diese Spielerei getestet)
LG Uschi
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige