Excel - Extraer caracteres junto a algo determinado

 
Vista:
sin imagen de perfil
Val: 140
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Inmarcesible (60 intervenciones) el 09/03/2021 21:07:17
¡Buenas!

En un montón de celdas hay un texto. Cada texto contiene la palabra "perro", por ejemplo. ¿Sería posible extraer los cuatro caracteres que están a la izquierda de la palabra "perro"? El número de palabras "perro" no es constante. Cada celda puede contener hasta cuatro veces esa palabra y, en ese caso, habría que extraer cuatro veces cuatro caracteres.

Lo he intentado con la fórmula "encontrar" pero se queda sólo en la primera palabra que encuentra y no continúa con las demás. No sé cómo hacerlo.

Espero haberme explicado;)

¡Gracias!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Antoni Masana (2485 intervenciones) el 09/03/2021 21:32:42
Sube un libro de ejemplo y lo miro.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Antoni Masana (2485 intervenciones) el 10/03/2021 10:17:37
Se puede hacer con formulas pero se complica en cada columna que añades de búsqueda.
Y además te limitas a la cantidad de columnas con formulas.
Con una macro puede poner hasta 16000 perros en un texto.

El código (Esta macro se ejecuta cuando escribas en cualquier celda y analiza el texto si se escribe en la columna A):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Option Explicit
 
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim a As Integer, Columna As Byte
    If Target.Column = 1 Then
      Columna = 2
       Application.EnableEvents = False
       For a = 1 To Len(Target.Text)
           If UCase(Mid$(Target.Text, a, 5)) = "PERRO" Then
              Cells(Target.Row, Columna) = Mid$(Target.Text, a - 5, 4)
              Columna = Columna + 1
           End If
       Next
       Application.EnableEvents = True
    End If
End Sub

El texto puede estar en mayúsculas o minúsculas y la macro detecta la palabra perro en cualquier formato.

Adjunto libro.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 140
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Inmarcesible (60 intervenciones) el 10/03/2021 10:29:30
¡Muchas gracias Andoni!

¿Y si sólo necesito una macro a ejecutar una vez que el texto está todo redactado?

El problema de los eventos es que, como se están ejecutando constantemente, se deshabilita la opción de "deshacer cambios" y eso para trabajar es horrible.

¿Podría hacerse como macro convencional?

¡Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Antoni Masana (2485 intervenciones) el 10/03/2021 12:36:43
Lo de que "deshabilita la opción de "deshacer cambios"" no lo sabia.

Esta tarde te la paso a macro convencional.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 140
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Inmarcesible (60 intervenciones) el 10/03/2021 12:41:50
Al menos, a mí, cuando ejecuto una macro, no me permite regresar al estado inicial previo a la macro. Y con un evento, como es una macro continua, me ocurre lo mismo.

De hecho, iba a preguntar si hay alguna manera de que no sea así para poder trabajar bien.

¡Gracias por la dedicación!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Antoni Masana (2485 intervenciones) el 10/03/2021 15:50:37
Esta es la macro para sacar los numero de todas las filas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Option Explicit
 
Sub Extraer_Numeros()
    Dim a As Integer, Fila As Long, Columna As Integer
 
    Application.EnableEvents = False
    Fila = 1
    While Cells(Fila, "A") <> ""
        Columna = 2
        For a = 1 To Len(Cells(Fila, "A"))
            If UCase(Mid$(Cells(Fila, "A"), a, 5)) = "PERRO" Then
                If IsNumeric(Mid$(Cells(Fila, "A"), a - 5, 4)) Then
                    Cells(Fila, Columna) = Mid$(Cells(Fila, "A"), a - 5, 4)
                    Columna = Columna + 1
                End If
            End If
        Next
        Fila = Fila + 1
    Wend
    Application.EnableEvents = True
End Sub

Despues de ejecutar la macro no puede deshacer lo que ha realizado la macro por lo que ya no se puede deshacer.
Con la macro manual la puedes ejecutar cuando todo este correcto.

He descubierto un error en la primera macro y es que no siempre hay 4 cifras númerias antes de perro.
En el ejemplo que me has eviado en la tercera línea el texto termina "Hasta los perros de los 7392 perro ciegos." El primer perro tiene un artículo y el segundo un número.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 140
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Inmarcesible (60 intervenciones) el 10/03/2021 16:06:20
Muchas gracias. No sé por qué, pero se queda en blanco y no extrae el dato de las celdas.

No te preocupes, sólo hay cifras en mi tabla. Eso fue un ejemplo para que te hicieras una idea y ha dado la casualidad de que había más palabras "perro", jejeje.

Respecto a lo de la opción de deshacer cuando una hoja tiene eventos, ¿hay manera de habilitarlo?

Es que tengo un evento que me va registrando los cambios en una tabla para llevar un histórico-control de dichos cambios. Van añadiéndose en una tabla de una hoja auxiliar. Pero claro, no se puede casi trabajar si cada segundo, al producirse un cambio en la tabla, no permite deshacer lo hecho en alguna equivocación. Un fastidio.

¡Muchas gracias! Eres un crack, Antoni.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Antoni Masana
Val: 4.908
Oro
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Antoni Masana (2485 intervenciones) el 10/03/2021 19:54:25
Puedes desactivar las macros o crear un par de macros para desactivar los eventos

1
2
3
Sub Eventos_STOP()
        Application.EnableEvents = False
End Sub

Y otra para Activarlos de nuevo

1
2
3
Sub Eventos_START()
        Application.EnableEvents = True
End Sub

El nombre de la macro es a tu gusto.

Saludos.
\\//_
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 140
Ha mantenido su posición en Excel (en relación al último mes)
Gráfica de Excel

Extraer caracteres junto a algo determinado

Publicado por Inmarcesible (60 intervenciones) el 10/03/2021 20:30:00
Pero así no quedan registrados los cambios que se hagan en las celdas porque el evento deja de correr.

¿Cómo podría establecer un control y poder llevar in registro de las celdas que se cambian?

¡Gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar