Jump to content

Localizar una misma cadena de texto dentro de una misma celda y extraer hora justo despues de esa cadena


Go to solution Solved by John Jairo V,

Recommended Posts

Buenas compañeros,

Me enfrento a un problema de programación con VBA que parece complicado, a ver si me pueden echar una mano ya que he investigado y no encuentro la manera de hacerlo.

En la siguiente imagen, en la columna B están las "Acciones". Dentro de las celdas de esta columna hay texto con información relativa al trabajo realizado.

Mi intención es buscar todas las veces que se repite la cadena "Sub-task stamped" dentro de una misma celda  y extraer la fecha y hora que está en el renglón justo de  abajo.

En el Ejemplo de la imagen el resultado sería: 

    -Sub-task Stamped: 10-Mar-2020 21:20

    - Sub-task Stamped: 10-Mar-2020 19:03

nota: Podría haber filas como es la B3 en la que no aparece esta cadena de texto, en ese caso no hay que hacer nada

Adjunto archivo, para visualizar la situación

Les agradecería enormemente que me puedieran ayudar a resolver el problema compañeros

Muchas gracias de antemano

Un abrazo

Captura.JPG

extraertexto.xlsm

Link to post
Share on other sites

Prueba con esta macro:

Sub BuscarFechas()
Application.ScreenUpdating = False
For x = 2 To Range("B" & Rows.Count).End(xlUp).Row
   Range("B" & x).Select
   fechas = Split(Range("B" & x), "/* ")
   For f = 1 To UBound(fechas)
      ActiveCell.Offset(0, 1).Select
      ActiveCell = Left(fechas(f), 15)
   Next
Next
End Sub

 

Link to post
Share on other sites

Buenas Antoni, en primer lugar muchisimas gracias por su aportación, es muy interesante!

Sin embargo, esta macro sólo extrae la última fecha dentro de la celda, y sin relacionarla con la cadena de texto " Sub-task stamped".

Me faltaría añadir alguna condición para localizar todas las veces que se repite  "Sub-task stamped" dentro de la celda y extraer la fecha de la forma que indica en su macro.

Es posible que haya celdas que no tengan la cadena  "Sub-task stamped" y no haya que extraer nada.

Un cordial saludo

Link to post
Share on other sites
  • Solution

¡Hola, a todos!

Puedes probar con el siguiente código:

Sub ExtraeFechas()
  Dim i&, j&, cadenas, fecha$
  
  Application.ScreenUpdating = False
  For i = 2 To Range("B" & Rows.Count).End(xlUp).Row
    cadenas = Split(Range("B" & i), "Sub-task stamped")
    If UBound(cadenas) Then
      For j = 1 To UBound(cadenas)
        fecha = Split(cadenas(j), "/*")(1)
        Range("C" & i).Offset(, j - 1) = Trim(Mid(fecha, 2, 18))
      Next j
    End If
  Next i
  
  Erase cadenas
  Application.ScreenUpdating = True
End Sub

¡Bendiciones!

Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Crear macros Excel

  • Posts

    • Hola, Una de las primeras cosas que se recomienda es que el consultante aporte toda la información que pueda servir para facilitar la ayuda solicitada. Saludos
    • Buenas tardes, Estoy intentando hacer un presupuesto en Exel he buscado en el foro y no he encontrado nada, he intentado hacer con sumar.si.conjunto pero no he sido capaz de solucionarlo. Lo que estoy intentando hacer es que de la hoja BD  en la columna E(Ingreso) reste la columna D(gasto) y traslado a la hoja Gastos el resultado a columna B(gastos/Ingresos),  cuando seleccione la fecha correspondiente dela hoja gastos columna B1. EspPresupuestos.xlsmero que me podáis ayudar Muchas gracias.
    • Muchas gracias por la respuesta pero no me sirve por 2 motivos: 1) borra todos los combobox del formulario y yo sólo quiero los 10 que indiqué 2) borra el contenido y la lista queda en blanco. Yo necesito que la lsita quede con contenido para elegir un nuevo valor. Saludos y muchas gracias.
    • El código que buscas es el siguiente. Lo puedes asignar a un botón, o incluirlo en algún módulo Dim ctrl As Control For Each ctrl In UserForm1.Controls If TypeName(ctrl) = "ComboBox" Then ctrl.clear End If Next
    • Hola a todos. Me gustaría me ayuden con lo siguiente. Quiero hacer una macro que borre el contenido de 10 combobox cuyo nombre es CbxComp1.....al....CbxComp10. Una forma de hacerlo es obviamente la que sigue (y me funciona): CbxComp1.Value = ""     CbxComp2.Value = ""     CbxComp3.Value = ""     CbxComp4.Value = ""     CbxComp5.Value = ""     CbxComp6.Value = ""     CbxComp7.Value = ""     CbxComp8.Value = ""     CbxComp9.Value = ""     CbxComp10.Value = ""   El tema es que quiero hacerlo con un bucle porque voy otras situaciones similares pero con más comboxes. He probado lo siguiente pero no me funciona (no soy experto): Dim i As Byte Dim k As String For i = 1 To 10     k = "CbxComp" & i & ".value"     k = "" Next i   Agradezco la ayuda de antemano
  • Recently Browsing

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Privacy Policy