Conversión de cadena a fecha (VBA)

Resuelto
Adranix -  
ccm81 Mensajes publicados 11033 Estado Miembro -

Hola,

Tengo una columna de Excel "vencimiento" cuyo valor se presenta en la forma ddMM, es decir, 101 para el 01/01, 2412 para el 24/12, etc...

Quiero transformar eso en una fecha del año en curso (sin necesariamente mostrarla), para poder hacer un cálculo en relación a la fecha de hoy.

Sin embargo, no logré realizar la conversión. ¿Podrías ayudarme? Gracias.

Detalles:

El objetivo es convertir este vencimiento en una fecha para, posteriormente, filtrar automáticamente al abrir, las filas que tengan un vencimiento dentro de los 30 días a partir de la fecha de hoy.

Como un CDate o DateFormat directo no funciona (calcula el 10/04/1900 para el vencimiento 101), pensé en algo como esto, pero no funciona (sin contar que el Left será erróneo a menudo):

Sub Auto_Open() For c = 7 To Cells(Rows.Count, 2).End(xlUp).Row D = Right(c, 2) E = Left(c, 2) CDate(Range(c) = E & "/" & D) ​​​​​​​.... Next c End Sub

2 respuestas

  1. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
     

    Hola

    Prueba esto, tu "fecha" siendo de tipo entero

    Public Function cvdate(d As Integer) As Date Dim j As Long, m As Long, a As Long, cvd As String a = Year(Date) m = d Mod 100 j = d \ 100 cvd = CDate(j & "/" & m & "/" & a) cvdate = cvd End Function

    o esto, la fecha siendo de tipo texto

    Public Function cvsdate(d As String) As Date Dim j As Long, m As Long, a As Long, cvd As String a = Year(Date) m = Right(d, 2) j = Left(d, Len(d) - 2) cvd = CDate(j & "/" & m & "/" & a) cvsdate = cvd End Function

    Saludos

    0
  2. Adranix
     

    Hola,

    Y gracias.

    Me molesta un poco que sea una función, pero funciona.

    Saludos.

    0
    1. ccm81 Mensajes publicados 11033 Estado Miembro 2 434
       

      Me molesta un poco que sea una función

      Puedes limitarte a recuperar la parte de la función que fabrica la fecha para integrarla en tu código.

      PD. ¡Siempre vale la pena crear una herramienta (aquí una función) aunque solo la utilicemos una vez!

      Buen provecho

      0