Extraer fecha
Hola, lo primero darte las gracias por tu ayuda.
La verdad que llevo un tiempo intentado y no doy con la solución, te explico tengo una columna con un descrptivo en cada celda, cada descriptivo es por ejemplo:
sdasdf 12/11 -23/12 sdadfs
aas 1/2 - 22/10 wqeq
Como puedes ver cada celda no tiene nada en común salvo que tienen una fecha entre medias.
He intentado varias fórmulas, pero no he logrado nada.
Te estaría muy agradecido si pudieses ayudarme.
Muchas gracias por tu tiempo, un saludo
La verdad que llevo un tiempo intentado y no doy con la solución, te explico tengo una columna con un descrptivo en cada celda, cada descriptivo es por ejemplo:
sdasdf 12/11 -23/12 sdadfs
aas 1/2 - 22/10 wqeq
Como puedes ver cada celda no tiene nada en común salvo que tienen una fecha entre medias.
He intentado varias fórmulas, pero no he logrado nada.
Te estaría muy agradecido si pudieses ayudarme.
Muchas gracias por tu tiempo, un saludo
1 Respuesta
Respuesta de Cadipas spain
1
1
Cadipas spain, Aficionado Execel y Macros etc
He creado una función que aparentemente te extrae la fecha, esto es un código que localiza los números y barras, de la celda que tú determinas y lo convierte a fecha.
El código en cuestión es :
Function ExtraerFecha(rango As Object) As Date
For x = 1 To Len(rango)
valor = Mid(rango, x, 1)
If Asc(valor) > 46 And Asc(valor) < 58 Then
fecha = fecha & valor
End If
Next x
ExtraerFecha = fecha
End Function
y despues de copiar este código en un modulo VB, solo tienes que poner en la formula
=extraerfecha(A1) y te extrae la fecha que tienes en la celda a1, esto te vale para cualquier celda, por ejemplo para sacar la decha de la celda b45 la formula sería
=extraerfecha(b45)
Si por algún motivo no sabes que hacer con este código, me lo comenta y te doy los pasos
a seguir. No dudes en decerlo.
El código en cuestión es :
Function ExtraerFecha(rango As Object) As Date
For x = 1 To Len(rango)
valor = Mid(rango, x, 1)
If Asc(valor) > 46 And Asc(valor) < 58 Then
fecha = fecha & valor
End If
Next x
ExtraerFecha = fecha
End Function
y despues de copiar este código en un modulo VB, solo tienes que poner en la formula
=extraerfecha(A1) y te extrae la fecha que tienes en la celda a1, esto te vale para cualquier celda, por ejemplo para sacar la decha de la celda b45 la formula sería
=extraerfecha(b45)
Si por algún motivo no sabes que hacer con este código, me lo comenta y te doy los pasos
a seguir. No dudes en decerlo.
Hola,
Primero darte las gracias por tu rápida contestación, he internado lo que me dices, pero me da un error
la celda donde lo intento es EXPOSICION ABC Material-Oficina 23/8 - 9/9/10
Me puedes ayudar, ¿por favor?
Un saludo
Primero darte las gracias por tu rápida contestación, he internado lo que me dices, pero me da un error
la celda donde lo intento es EXPOSICION ABC Material-Oficina 23/8 - 9/9/10
Me puedes ayudar, ¿por favor?
Un saludo
Ok, me temía que pudiera ser algo así, em principio, pensaba que solo tenia los números de la fecha, me confundió el tamaño, dame algo de tiempo para analizarlo de nuevo y ya te contestare.
Si pudiera ver un ejemplo de casi todos posibles los formatos de esa celda me sería de gran ayuda.
Siempre tiene ese conjunto de 23/8 - 9/9/10 ?
Espero una aclaración. Mientras le doy vueltas y me tomo un café.
Si pudiera ver un ejemplo de casi todos posibles los formatos de esa celda me sería de gran ayuda.
Siempre tiene ese conjunto de 23/8 - 9/9/10 ?
Espero una aclaración. Mientras le doy vueltas y me tomo un café.
De nuevo muchísimas gracias por tu rapidez, te paso algunas descripciones a ver si e pueden
Articulo 10/9 - 23/9/10 - Perfumeria.
Cabecera 10/9 -23/9/10 - Sierra Mecanica
Cabecera Baños 5 L. - 1 - 25/11/2010
Cabecera DUPLO .-25/10-4/11/2010
Promoción 4/10 -10/10/10 - Toallas
Cabecera Ventanas -19/11 - 5/12/2010
Articulo Puerta.- 5 - 18/11/2010
Colaboración Cíal. 28/9 -30/9/10 - Casetas 2 metros
Como puedes ver pueden variar, de nuevo muchas gracias por tu ayuda
Un saludo
Articulo 10/9 - 23/9/10 - Perfumeria.
Cabecera 10/9 -23/9/10 - Sierra Mecanica
Cabecera Baños 5 L. - 1 - 25/11/2010
Cabecera DUPLO .-25/10-4/11/2010
Promoción 4/10 -10/10/10 - Toallas
Cabecera Ventanas -19/11 - 5/12/2010
Articulo Puerta.- 5 - 18/11/2010
Colaboración Cíal. 28/9 -30/9/10 - Casetas 2 metros
Como puedes ver pueden variar, de nuevo muchas gracias por tu ayuda
Un saludo
Prueba esta otra función modificada:
Function ExtraerFecha(rango As Object) As Date
For x = 1 To Len(rango)
If Asc(Mid(rango, x, 1)) = 47 And Asc(Mid(rango, x + 1, 1)) = 47 Then Exit For
If Asc(Mid(rango, x, 1)) = 47 And Asc(Mid(rango, x + 2, 1)) = 47 Then Exit For
If Asc(Mid(rango, x, 1)) = 47 And Asc(Mid(rango, x + 3, 1)) = 47 Then Exit For
Next x
Do While IsNumeric(Mid(rango, x - 2, 1))
x = x - 1
Loop
xx = x
Do While Asc(Mid(rango, xx, 1)) > 46 And Asc(Mid(rango, xx, 1)) < 58
xx = xx + 1
If xx > Len(rango) Then Exit Do
Loop
ExtraerFecha = Mid(rango, x - 1, xx - x + 1)
End Function
'-----------------
Function ExtraerFecha(rango As Object) As Date
For x = 1 To Len(rango)
If Asc(Mid(rango, x, 1)) = 47 And Asc(Mid(rango, x + 1, 1)) = 47 Then Exit For
If Asc(Mid(rango, x, 1)) = 47 And Asc(Mid(rango, x + 2, 1)) = 47 Then Exit For
If Asc(Mid(rango, x, 1)) = 47 And Asc(Mid(rango, x + 3, 1)) = 47 Then Exit For
Next x
Do While IsNumeric(Mid(rango, x - 2, 1))
x = x - 1
Loop
xx = x
Do While Asc(Mid(rango, xx, 1)) > 46 And Asc(Mid(rango, xx, 1)) < 58
xx = xx + 1
If xx > Len(rango) Then Exit Do
Loop
ExtraerFecha = Mid(rango, x - 1, xx - x + 1)
End Function
'-----------------
De nuevo muchísimas gracias por tu ayuda, el problema que tengo es que me coge solo los primeros 3 números, me explico, si por ejemplo es 10/9 -23/9/10 el dato que me muestra es
9/10/2023, o en el caso de ser numérico simplemente un numero.
Crees que se puede extraer todo? que el dato sea 10/9 -23/9/10 o 10/9 -23/9.
Muchas gracias, un saludo
9/10/2023, o en el caso de ser numérico simplemente un numero.
Crees que se puede extraer todo? que el dato sea 10/9 -23/9/10 o 10/9 -23/9.
Muchas gracias, un saludo
Te diré, que es posible que se deba a la versión que utilices de excel, o la forma de presentar las fechas, o si es versión inglesa, etc... por i parte al ejemplo que me indicas:
10/9 -23/9/10 a mi me devuelve 23/09/2010, por lo que entiendo que la formación de la fecha en tu programa o ordenador es distinta a la mía, yo la fecha se la indico
dia/mes/año y aparente mente a ti te responde de otra manera, mi pregunta sería
¿El resto de las fechas también te cambia el dia/mes/año?
Si es así, te tendría que cambiar el orden para que te lo indique bien.
Todo se puede hacer...
10/9 -23/9/10 a mi me devuelve 23/09/2010, por lo que entiendo que la formación de la fecha en tu programa o ordenador es distinta a la mía, yo la fecha se la indico
dia/mes/año y aparente mente a ti te responde de otra manera, mi pregunta sería
¿El resto de las fechas también te cambia el dia/mes/año?
Si es así, te tendría que cambiar el orden para que te lo indique bien.
Todo se puede hacer...
La version que tengo de excel es la de 2010 y esta en ingles.
El formato de las celdas es días mes año.
La form que me devuelve es igual que a ti 23/09/2010 pero la fecha anterior no me sale, se me ocurre poner otra forula como la tuya, pero en otra celda la cual sea el inicio. Quiero decir 2 celdas en una fecha de inicio y otra fecha finalización
¿Me puedes ayudar?
Un saludo y muchas gracias de nuevo
El formato de las celdas es días mes año.
La form que me devuelve es igual que a ti 23/09/2010 pero la fecha anterior no me sale, se me ocurre poner otra forula como la tuya, pero en otra celda la cual sea el inicio. Quiero decir 2 celdas en una fecha de inicio y otra fecha finalización
¿Me puedes ayudar?
Un saludo y muchas gracias de nuevo
Hola otra vez, he estado revisando la formla más al detalle y creo que ya se donde esta el problema.
A) EXPOSICIÓN Martillos 23/8/10 - 9/9/10: En este caso me coge la 1 fecha y omite la 2
B) EXPOSICION Martillos 23/8 - 9/9/10 : Toma solo la 2 fecha
C) EXPOSICIÓN Martillos 23/8 - 9/9: Me da un error
Un saludo y muchas gracias
A) EXPOSICIÓN Martillos 23/8/10 - 9/9/10: En este caso me coge la 1 fecha y omite la 2
B) EXPOSICION Martillos 23/8 - 9/9/10 : Toma solo la 2 fecha
C) EXPOSICIÓN Martillos 23/8 - 9/9: Me da un error
Un saludo y muchas gracias
Según la macro que te envíe lo hace correcto, ya que yo intuí que siempre la fecha esta formada por dia/mes/año bien sea dormato corto o largo, que que el otro dato antes de la fecha, no lo considero una fecha y podía ser una fracción, ahora bien por lo que me comentas son dos fechas, en un caso es sin el año y en el otro puede tener o no tener el año.
Si esto es así dímelo y la reformo para que funcione. Si crees oportuno hablar vía messenger, gmail, dame tu dirección y te agrego para hablar y acláralo online.
Si esto es así dímelo y la reformo para que funcione. Si crees oportuno hablar vía messenger, gmail, dame tu dirección y te agrego para hablar y acláralo online.
Hola, si quieres mejor hablamos por Gtalk, mi mail es [email protected].
Muchas gracias
Muchas gracias
Prueba esta otra función.
Function ExtraerFecha(rango As Object) As String
For x = Len(rango) To 1 Step -1
If Asc(Mid(rango, x, 1)) = 47 Then
xx = x + 1
Do While Asc(Mid(rango, xx, 1)) > 46 And Asc(Mid(rango, xx, 1)) < 58
xx = xx + 1
If xx > Len(rango) Then Exit Do
Loop
xxx = xx - 1
Do While Asc(Mid(rango, xxx, 1)) > 46 And Asc(Mid(rango, xxx, 1)) < 58
xxx = xxx - 1
If xxx = 0 Then Exit Do
Loop
If fecha = "" Then
fecha = Mid(rango, xxx + 1, xx - xxx)
x = xxx
Else
fecha = Mid(rango, xxx + 1, xx - xxx) & " - " & fecha
x = xxx
End If
End If
Next x
ExtraerFecha = fecha
End Function
Function ExtraerFecha(rango As Object) As String
For x = Len(rango) To 1 Step -1
If Asc(Mid(rango, x, 1)) = 47 Then
xx = x + 1
Do While Asc(Mid(rango, xx, 1)) > 46 And Asc(Mid(rango, xx, 1)) < 58
xx = xx + 1
If xx > Len(rango) Then Exit Do
Loop
xxx = xx - 1
Do While Asc(Mid(rango, xxx, 1)) > 46 And Asc(Mid(rango, xxx, 1)) < 58
xxx = xxx - 1
If xxx = 0 Then Exit Do
Loop
If fecha = "" Then
fecha = Mid(rango, xxx + 1, xx - xxx)
x = xxx
Else
fecha = Mid(rango, xxx + 1, xx - xxx) & " - " & fecha
x = xxx
End If
End If
Next x
ExtraerFecha = fecha
End Function
Muchas gracias, parece que funciona bien salvo en dos casos,
Exposición 4/10 -14/10/10 - Ventanas 1/4 Pallet 4/10 - Sale 14/10/10 - 1/4
Cabecera 10-9 -23/9/10 - Total 75 ml. Sale 23/9/10
Crees que me podrías ayudar, entiendo que ya es pedir demasiado, de nuevo muchísimas gracias
Un saludo
Exposición 4/10 -14/10/10 - Ventanas 1/4 Pallet 4/10 - Sale 14/10/10 - 1/4
Cabecera 10-9 -23/9/10 - Total 75 ml. Sale 23/9/10
Crees que me podrías ayudar, entiendo que ya es pedir demasiado, de nuevo muchísimas gracias
Un saludo
La verdad es que si lo remiro podía dar con otra solución pero dentro de esa anarquía que tienes de valores es muy difícil moverse, y dar una solución para todos los casos.
Pero como te comentaba en otra ocasión pienso que nos movemos con distintas versiones o idiomas, ya que a mi me da otros resultados por ejemplo
en el primer caso me da: 4/10 - 14/10/10 - 1/4 - 4/10 23/9/10
en el segundo me da: 23/9/10
y según lo definió en la macro funciona bien y es esi. Busco las "/" y localizo los números adjuntos a esas barras y con eso entiendo que es una fecha, por ello el resultado es lo que se espera, y en el segundo caso, como no esta separado por "/" y esta separado por "-", no lo entiende como fecha.
Si quieres que siga analizando, dímelo y pero comentame que condiciones quieres que contemple como fecha...
Pero como te comentaba en otra ocasión pienso que nos movemos con distintas versiones o idiomas, ya que a mi me da otros resultados por ejemplo
en el primer caso me da: 4/10 - 14/10/10 - 1/4 - 4/10 23/9/10
en el segundo me da: 23/9/10
y según lo definió en la macro funciona bien y es esi. Busco las "/" y localizo los números adjuntos a esas barras y con eso entiendo que es una fecha, por ello el resultado es lo que se espera, y en el segundo caso, como no esta separado por "/" y esta separado por "-", no lo entiende como fecha.
Si quieres que siga analizando, dímelo y pero comentame que condiciones quieres que contemple como fecha...
- Compartir respuesta
- Anónimo
ahora mismo