Karan ha molti dati testuali in una cartella di lavoro. Alcuni di questi dati testuali contengono date. Ha bisogno di un modo per rimuovere eventuali date, ma lasciare qualsiasi altro testo che potrebbe essere in una cella. Ad esempio, ciò che inizia come “4/15/16 test eseguito con successo” o “test eseguito il 4/15/16” sarebbe, dopo l’eliminazione, “

test eseguito con successo” e “test eseguito”.

Se le tue date seguono sempre uno schema semplice, puoi utilizzare la funzione SOSTITUISCI per rimuoverle. Ad esempio, se la data è sempre composta da un mese a una cifra e un giorno a due cifre, puoi usare quanto segue per rimuoverla:

=SUBSTITUTE(A1,MID(A1,SEARCH("?/??/??",A1),7),)

Ci sono molti problemi con una tale formula. Innanzitutto, restituisce un valore di errore se non è presente alcuna data nella cella A1 o se la data nella cella A1 ha solo un giorno a una cifra. Inoltre, se la data ha un mese a due cifre, lascia la prima cifra intatta (a condizione che la data utilizzi un giorno a due cifre) o restituisce un valore di errore (se la data utilizza un giorno a una cifra).

Se la tua data appare all’inizio o alla fine del testo in una cella, potresti usare un diverso tipo di formula:

=IFERROR( IF( VALUE( LEFT( A1, 1)) > 0, RIGHT( A1, LEN(A1) - 7), ""), LEFT( A1, FIND( "/", A1) - 2))

Il problema con questo approccio è che richiede anche il modello esatto M / GG / AA o MM / G / AA. Presenta quindi gli stessi problemi della formula precedente.

Un approccio più versatile consiste nell’utilizzare una macro per cercare una data e quindi rimuoverla dalla stringa. La seguente macro di esempio esamina il contenuto di una cella e lo suddivide in “parole” utilizzando la funzione Split. Quindi inizia a rimettere insieme le parole, purché la parola non sia una data.

Function RemoveDates(ByVal vC As String)

Dim arr As Variant     Dim s As String     Dim i As Integer

RemoveDates = ""

If vC > "" Then         arr = Split(vC, " ")

For i = LBound(arr) To UBound(arr)

If Not IsDate(arr(i)) Then                 s = s & arr(i) & " "

End If         Next i         RemoveDates = Left(s, Len(s) - 1)

End If End Function

Si utilizza la macro come funzione definita dall’utente nel foglio di lavoro, come segue:

=RemoveDates(A1)

L’unico inconveniente di questa macro è che se si hanno più spazi tra le parole, questi spazi vengono rimossi durante il processo di sostituzione. Se questo è un grosso problema per te, potresti considerare di fare affidamento su un’espressione regolare nella tua macro, come questa:

Function RemoveDates(MyRange As Range) As String     Dim sRaw As String     Dim sPattern As String     Dim regEx As New RegExp

sRaw = MyRange.Value

sPattern = "[0-9]{1,2}[-.\\/][0-9]{1,2}[-.\\/][0-9]{2}"



With regEx         .Global = True         .MultiLine = True         .IgnoreCase = False         .pattern = sPattern     End With

If regEx.Test(sRaw) Then         RemoveDates = regEx.Replace(sRaw, "")

Else         RemoveDates = "Not matched"

End If     Set regEx = Nothing End Function

Questa funzione viene utilizzata nel foglio di lavoro allo stesso modo della precedente funzione definita dall’utente:

=RemoveDates(A1)

L’uso di espressioni regolari può sembrare un’arte nera per alcuni, ma questo particolare utilizzo è piuttosto semplice. Il modello (memorizzato nella variabile sPattern) dice che una o due cifre seguite da un carattere divisore (trattino, punto, barra rovesciata o barra in avanti) seguite da una o due cifre in più seguite da un altro carattere divisore seguito da due cifre è considerato un Data. Se una tale corrispondenza viene trovata nella cella, viene rimossa.

Per utilizzare l’approccio delle espressioni regolari, dovrai assicurarti di includere un referente alla seguente libreria nell’editor di Visual Basic (scegli Riferimenti dal menu Strumenti):

Microsoft VBScript Regular Expressions 5.5

Si noti inoltre che la funzione restituisce “Non corrispondente” se una data non si trovava nella cella a cui si fa riferimento.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (7768) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.