Karan tiene muchos datos textuales en un libro de trabajo. Algunos de esos datos textuales contienen fechas. Necesita una forma de eliminar las fechas, pero dejar cualquier otro texto que pueda estar en una celda. Por ejemplo, lo que comienza como «15/4/16 la prueba se ejecutó correctamente» o «la prueba se ejecutó el 15/4/16» sería, después de la eliminación, «

la prueba se ejecutó correctamente» y «la prueba se ejecutó».

Si sus fechas siempre siguen un patrón simple, puede usar la función SUSTITUIR para eliminarlas. Por ejemplo, si la fecha siempre consta de un mes de un solo dígito y un día de dos dígitos, puede usar lo siguiente para eliminarlo:

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

Hay múltiples problemas con esta fórmula. Primero, devuelve un valor de error si no hay fecha en la celda A1 o si la fecha en la celda A1 solo tiene un día de un solo dígito. Además, si la fecha tiene un mes de dos dígitos, deja ese primer dígito intacto (siempre que la fecha use un día de dos dígitos) o devuelva un valor de error (si la fecha usa un día de un solo dígito).

Si su fecha aparece al principio o al final del texto en una celda, puede usar un tipo diferente de fórmula:

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

El problema con este enfoque es que también requiere un patrón exacto M / DD / YY o MM / D / YY. Por tanto, presenta los mismos problemas que la fórmula anterior.

Un enfoque más versátil es usar una macro para buscar una fecha y luego eliminarla de la cadena. La siguiente macro de ejemplo examina los contenidos de una celda y la divide en «palabras» mediante la función Dividir. Luego comienza a juntar las palabras, siempre que la palabra no sea una fecha.

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

Utiliza la macro como una función definida por el usuario en su hoja de trabajo, de la siguiente manera:

=RemoveDates(A1)

El único inconveniente de esta macro es que si tiene varios espacios entre palabras, esos espacios se eliminan en el proceso de reemplazo. Si esto es importante para usted, podría considerar confiar en una expresión regular en su macro, como esta:

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

Esta función se usa en su hoja de trabajo de la misma manera que la función anterior definida por el usuario:

=RemoveDates(A1)

El uso de expresiones regulares puede parecer un arte negro para algunos, pero este uso en particular es bastante sencillo. El patrón (almacenado en la variable sPattern) dice que uno o dos dígitos seguidos de un carácter divisor (guión, punto, barra diagonal inversa o barra diagonal) seguido de uno o dos dígitos más seguidos de otro carácter divisor seguido de dos dígitos se considera un fecha. Si se encuentra una coincidencia de este tipo en la celda, se elimina.

Para utilizar el enfoque de expresiones regulares, deberá asegurarse de incluir un referente a la siguiente biblioteca en el Editor de Visual Basic (elija Referencias en el menú Herramientas):

Microsoft VBScript Regular Expressions 5.5

También debe tener en cuenta que la función devuelve «No coincide» si una fecha no se encuentra en la celda a la que hace referencia.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.

link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

ExcelTips es su fuente de formación rentable en Microsoft Excel.

Este consejo (7768) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.