• 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.

Datum verwijderen uit string

Status
Niet open voor verdere reacties.

Conseclusie

Gebruiker
Lid geworden
14 feb 2012
Berichten
358
Heeft iemand een korte UDF (of andere oplossing) voor het volgende probleempje:
In een cel staat de volgende string:

"Activiteit 14-07-2016 13:00 - 14-07-2016 17:00"

Ik wil de beide datums uit de string verwijderen, dus:

"Activiteit 13:00 - 17:00".

De datum is variabel, evenals de activiteit. Datum staat dus nooit op een vaste positie, maar is wel steeds dd-mm-jjjj.
Met de Like-operator is het wel eenvoudig vast te stellen of de string een datum bevat, maar om die datum eruit te krijgen blijkt lastig.
 
Een UDF met RegExp (niet makkelijk maar zeer krachtig)
Code:
Public Function DatumVerwijderen(strString As String) As String
    With CreateObject("VBScript.RegExp")
        .Global = True
        .Pattern = "\d{1,2}-\d{1,2}-\d{1,4}"
        DatumVerwijderen = .Replace(strString, "")
        .Pattern = "\ +"
        DatumVerwijderen = .Replace(DatumVerwijderen, " ")
    End With
End Function
 
Code:
sub M_snb()
   msgbox F_snb("Activiteit 14-07-2016 13:00 - 14-07-2016 17:00")
End sub

function F_snb(c00)
   F_snb= replace(join(filter(split(replace(c00," - ","~")),"-",0)),"~"," - ")
End Function

of
Code:
function F_snb(c00)
   F_snb= join(filter(split(c00),"-2",0))
End Function

Zowel krachtig als simpel ;)
 
Laatst bewerkt:
@alphamax: werkt als een klok. Mooie (en voor mij leerzame) oplossing.
@snb: altijd genieten van je ultra-compacte oplossingen. :thumb: Er zit nog een klein dingetje scheef: resultaat is nu "activiteit 17:00". De aanvangstijd is er dus ook afgevallen.
 
Het ligt aan de invoer, als het door verschillende personen wordt ingevoerd kan je vanalles verwachten.
datums met of zonder voorloopnullen, jaren met of zonder eeuwaanduiding, spaties tussen de getallen en streepjes of niet, datum voor of achter de tijd etc. etc.
 
Laatst bewerkt:
@snb: altijd genieten van je ultra-compacte oplossingen. :thumb: Er zit nog een klein dingetje scheef: resultaat is nu "activiteit 17:00". De aanvangstijd is er dus ook afgevallen.

Bij de tweede -kortste- versie toch niet ?

En met deze loopt het nu ook soepel:

Code:
Function F_snb(c00)
   F_snb = Replace(Join(Filter(Split(Replace(c00, " - ", " ~ ")), "-", 0)), "~", "-")
End Function

Misschien is deze ook wel aardig:

Code:
Function F_snb(c00)
   F_snb = Mid(Join(Filter(Split(":" & c00), ":")), 2)
End Function
 
Laatst bewerkt:
Klopt inderdaad! Had die tweede over het hoofd gezien. Bedankt!
(en alphamax bedankt voor de extra toelichting)
 
Hier nog een formule-variant:
Code:
=LINKS(A1;VIND.SPEC("-**-";A1)-3)&SPATIES.WISSEN(DEEL(A1;9+VIND.SPEC("-**-";A1);5)&" - "&RECHTS(A1;5))
 
Of dan:
PHP:
="Activiteit " &MID(A1;SEARCH(":";A1)-2;8) & RIGHT(A1;5)
 
@AlexCEL: werkt inderdaad prima; thx!
@snb: zal zonder twijfel ook werken; de activiteit varieert echter.
 
Dan heb je een andere vraag dan in #1 geformuleerd.
En de datum doet er niet toe.
 
Laatst bewerkt:
Staat de datum altijd voor de tijd?
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan