• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

VBA zoeken en vervangen van leestekens in datumnotitie

Status
Niet open voor verdere reacties.

poelie01

Gebruiker
Lid geworden
31 jul 2012
Berichten
38
Hallo,

Zou graag in (kolom A) alle punten die voorkomen in een datumnotitie willen vervangen voor een -

Weet iemand hier een vba code voor?

Alvast bedankt.
 
Al je een macro opneemt en dan zoek en vervang alle doet heb je de vba code ervoor.
 
alleen vervangt excel het niet correct.

Voorbeeld:

01.10.2012 wordt 10-01-2012
 
Dan moet je even kijken in de regionale instellingen van Windows of daar de datumnotatie wel goed staat.
 
Die staan in ieder geval goed.
Je krijgt dus na die zoek- en vervang opdracht de amerikaanse datum notatie.
kijk eens in de instellingen van Excel of er daar iets over staat.
 
ook daar kan ik niks vreemds vinden

wellicht in de code?

Code:
    Cells.Replace What:=".", Replacement:="-", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False
 
Laatst bewerkt door een moderator:
Wanneer ik het handmatig via zoeken en vervangen laat lopen gaat het wel goed.
 
Probeer deze code maar eens:

Code:
Cells.NumberFormat = "dd-mm-yyyy"
Cells.Replace What:=".", Replacement:="-", LookAt:=xlPart, SearchOrder _
 :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
 
Hallo Cobbe,

Bedankt voor je reactie maar ook dit levert 10-01-2012 op ipv 01-10-2012

Gr.
 
Code:
With Columns(1)
    .NumberFormat = "mm-dd-yyyy"
    .Replace What:=".", Replacement:="-", LookAt:=xlPart, SearchOrder _
        :=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=True
End With
 
Het zal dan toch aan je instellingen te wijten zijn.
 
Hallo Bakkertje,

Opzich werkt de code alleen word de andere data die al in de kolom staan onjuist veranderd.

Voorbeeld:

Oude data in kolom A:

01-01-2012 (getalnotatie = * 14-03-2001)

Nieuwe data wordt toegevoegd onder oude data in kolom A:

01.10.2012 (getalnotatie = standaard)

Heb jij hier ook een oplossing voor?

Alvast bedankt!
 
Laatst bewerkt:
Ik krijg altijd jeuk van de manier waarop VBA omgaat met datums.. het gaat zo vaak fout, dat heeft te maken met het feit dat VBA altijd met engelse datum opmaak werkt tenzij je in de macro specifieke instructies opneemt voor een ander formaat, en blijkbaar is het instellen van een celopmaak niet voldoende.

Ik gebruik (of misbruik) altijd de tekst naar kolommen functionaliteit. daar kun je zelf aangeven welke volgorde de getallenreeksen staan DMY of MDY of YMD wat je maar wilt.. Dit gaat zelfs onafhankelijk van de PC instelling, alleen de presentatie zal altijd in de PC instellingen modus zijn MAAR hij zal dan nooit de datum 1 oktober omzetten in 10 januari. op voorwaarde dat je dus de juiste volgorde hebt gekozen bij tekst naar kolommen functie.. (in dit geval DMY omdat met 01.10.2012 de datum 1 oktober word bedoeld)

Ik heb onderstaande code net getest en dat gaat goed.

Code:
Sub TekstNaarkolom()

    Range("A1", Range("A" & Rows.Count).End(xlUp)).Select
    Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=False, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
        :=Array(1, 4), TrailingMinusNumbers:=True
    Columns("D:D").EntireColumn.AutoFit
End Sub

zie bijlage om het zelf even te proberen..
 

Bijlagen

Wat doet deze?
Code:
Sub tst()
For Each cl In Range(Range("A1"), Range("A" & Rows.Count).End(xlUp))
    If InStr(cl, ".") > 0 Then
        With cl
            .Replace ".", "-"
            .NumberFormat = "mm-dd-yyyy"
        End With
     End If
Next
End Sub
 
@ warme bakker: probleem hiermee is dat ik de waarde weer gebruik voor een andere formule om het weeknr. te berekenen

=INTEGER((A1-DATUM(JAAR(A1-WEEKDAG(A1-1)+4);1;3)+WEEKDAG(DATUM(JAAR(A1-WEEKDAG(A1-1)+4);1;3))+5)/7)

@ roeljongman: Wanneer je de macro voor een tweede maal uitvoert vervangt hij de nieuwe input correct maar de oude input veranderd ook.
 
Code:
Sub tst()
lRow = Range("A" & Rows.Count).End(xlUp).Row
fRow = lRow
For i = lRow To 1 Step -1
    If InStr(Cells(i, 1), ".") > 0 Then fRow = fRow - 1
Next
For Each cl In Range("A" & fRow + 1 & ":" & "A" & lRow)
    cl.Value = DateSerial(Split(cl.Value, ".")(2), Split(cl.Value, ".")(1), Split(cl.Value, ".")(0))
    cl.NumberFormat = "dd-mm-yyyy"
Next
End Sub
 
Bij het opnieuw uitvoeren van de macro komt er een foutmelding:

Code:
Sub tst()
lRow = Range("A" & Rows.Count).End(xlUp).Row
fRow = lRow
For i = lRow To 1 Step -1
    If InStr(Cells(i, 1), ".") > 0 Then fRow = fRow - 1
Next
For Each cl In Range("A" & fRow + 1 & ":" & "A" & lRow)
    [COLOR="#FF0000"]cl.Value = DateSerial(Split(cl.Value, ".")(2), Split(cl.Value, ".")(1), Split(cl.Value, ".")(0))[/COLOR]    cl.NumberFormat = "dd-mm-yyyy"
Next
End Sub
 
Laatst bewerkt door een moderator:
poelie01,

Een tip.
Selecteer de volgende keer je code en klik dan boven in het menu op #.
Dan komt je code netjes in een apart vak zoals bij "Warme bakkertje" te staan.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan