Extraer cadenas de texto en Excel (Valoración de 5.00 sobre 5, resultante de 1 votos)

Aplicaciones y herramientas informáticas, internet y otros sucedáneos informáticos
Avatar de Usuario
por
#261048
Buenos días a tod@s,

Tengo varios documentos pdf, con muchas hojas cada uno, y necesito extraer una serie de datos concretos de las hojas. Necesito extraer unos datos/cadenas de datos que tienen el siguiente formato: NOMBRE#XXNÚMERO.CIUDAD. Si hago copiar/pegar del pdf a una hoja excel, no me lo separa en columnas y me queda texto que no me sirve mezclado con las cadenas, un estilo a esto:

Datos no útiles NOMBRE#XXNÚMERO.CIUDAD Datos no útiles NOMBRE#XXNÚMERO.CIUDAD Datos no útiles ...

Tengo una ventaja que no estoy sabiendo aprovechar: Hay un parámetro que es la almohadilla # que se repite siempre, y con la función extraer de excel estoy intentando extraer las cadenas NOMBRE#XXNÚMERO.CIUDAD marcándole el inicio como un espacio en blanco y un final como otro espacio en blanco para poder aislar la cadena y extraerla, pero no lo estoy consiguiendo. El segundo problema sería que me volcara cada una de las cadenas en una celda diferente.

¿Podéis darme alguna idea de como hacerlo?

Un saludo.
por
#261061
Considero que tu principal problema es pasar de pdf a excel, me explico puedes usar algún software tipo OCR????

porque si es así, ya estaría solucionado tu problema y el excel te quedaría "niquelado" ;)

Saludos.
Avatar de Usuario
por
#261066
Si lo quieres hacer con extraer:

Texto en la celda A1:

Primera palabra:
Código: Seleccionar todoEXTRAE($A$1;1;ENCONTRAR("#";$A$1;1)-1)

Segunda palabra:
Código: Seleccionar todoEXTRAE($A$1;ENCONTRAR("#";$A$1;1)+1;ENCONTRAR("#";$A$1;ENCONTRAR("#";$A$1;1)+1)-ENCONTRAR("#";$A$1;1)-1)


No es difícil pero algo laborioso.

Si lo quieres hacer con una UDF:

Código: Seleccionar todoFunction SepararPalabras(Texto As String, Posicion As Integer, Optional Separador_op As String) As String
'___Devuelve la palabra según la posición que se indique, de izquierda a derecha
'___Si no se indica el separador, cogerá por defecto un espacio
'___wenner, soloingeniería
    Dim MatrizPalabras As Variant

    If TypeName(Texto) <> "String" Or _
    IsNumeric(Posicion) = False Then
        SepararPalabras = CVErr(xlErrNA)
    Else
        If VBA.IsMissing(Separador_op) = True Then Separador_op = " "
        MatrizPalabras = Split(Texto, Separador_op)
        Select Case Posicion - 1
            Case Is > UBound(MatrizPalabras), Is = -1: SepararPalabras = "" 'CVErr(xlErrNA)
            Case Else: SepararPalabras = MatrizPalabras(Posicion - 1)
        End Select
    End If
End Function


Para la primera palabra:
Código: Seleccionar todoSepararPalabras($A$1;1;"#")

Para la segunda palabra:
Código: Seleccionar todoSepararPalabras($A$1;2;"#")


Otro método es al copiar el pdf, pégarlo en un archivo .txt, después en excel vas a datos/desde texto, seleccionas y abres el archivo, en la nueva ventana le das a siguiente, marcas otro introduces # en el caja de texto y pulsas finalizar, seleccionas una celda y aceptas.
Avatar de Usuario
por
#261078
Muchas gracias compañero,

En un rato pruebo las soluciones y te digo a ver que tal ;)

Mil gracias de nuevo.
Avatar de Usuario
por
#261122
Buenas tardes wenner,

Ya he probado la función, la idea es buena pero no acaba de servirme porque lo que me hace es lo siguiente:

Si tengo una celda excel con la siguiente información:

Datos no útiles + NOMBRE#XXNÚMERO.CIUDAD + Datos no útiles + NOMBRE#XXNÚMERO.CIUDAD2 Datos no útiles ...

Lo que hace la función es eliminarme los primero Datos no útiles y me deja esto:

NOMBRE#XXNÚMERO.CIUDAD + Datos no útiles + NOMBRE#XXNÚMERO.CIUDAD2 Datos no útiles ...

A mi lo que me interesaría que me sacara sería esto, en diferentes celdas;

NOMBRE#XXNÚMERO.CIUDAD
NOMBRE#XXNÚMERO.CIUDAD2
NOMBRE#XXNÚMERO.CIUDAD3
NOMBRE#XXNÚMERO.CIUDAD4
NOMBRE#XXNÚMERO.CIUDAD5

Un saludo.
Avatar de Usuario
por
#261131
wolfhuk escribió:Buenas tardes wenner,

Ya he probado la función, la idea es buena pero no acaba de servirme porque lo que me hace es lo siguiente:

Si tengo una celda excel con la siguiente información:

Datos no útiles + NOMBRE#XXNÚMERO.CIUDAD + Datos no útiles + NOMBRE#XXNÚMERO.CIUDAD2 Datos no útiles ...

Lo que hace la función es eliminarme los primero Datos no útiles y me deja esto:

NOMBRE#XXNÚMERO.CIUDAD + Datos no útiles + NOMBRE#XXNÚMERO.CIUDAD2 Datos no útiles ...

A mi lo que me interesaría que me sacara sería esto, en diferentes celdas;

NOMBRE#XXNÚMERO.CIUDAD
NOMBRE#XXNÚMERO.CIUDAD2
NOMBRE#XXNÚMERO.CIUDAD3
NOMBRE#XXNÚMERO.CIUDAD4
NOMBRE#XXNÚMERO.CIUDAD5

Un saludo.

Sube el archivo, por que así (sin conocer que datos no son útiles) va a ser difícil.
Avatar de Usuario
por
#261146
wenner escribió:Sube el archivo, por que así (sin conocer que datos no son útiles) va a ser difícil.


Por temas de protección de datos no puedo subirlos, pero te pondré un ejemplo de una línea tipo:

Maquinaria Industrial Pesada PEPE#AB59473.BARCELONA Tractores GERARDO#ZV54789.MADRID Maquinaria Industrial Retirada ...
Avatar de Usuario
por
#261158
Prueba esta otra:

Código: Seleccionar todoFunction SepararPalabras(Texto As String, Posicion As Integer) As String
'___Devuelve la palabra según la posición que se indique, de izquierda a derecha
'___wenner, soloingeniería
    Dim n As Integer    'Contador de bucle
    Dim m As Integer    'Contador de bucle
   
    Dim MatrizPalabras() As String
    Dim SeleccionPalabras() As String
   
    If IsNumeric(Posicion) = False Then
        SepararPalabras = CVErr(xlErrNA)
    Else
        m = 0
        MatrizPalabras() = Split(Texto)
       
        For n = 0 To UBound(MatrizPalabras)
            If MatrizPalabras(n) Like "*#*" = True Then
                m = m + 1
                ReDim Preserve SeleccionPalabras(1 To m) As String
                SeleccionPalabras(m) = MatrizPalabras(n)
            End If
        Next

        If Posicion > m Then
            SepararPalabras = ""    'No devuelve ningún valor si no hay datos para esa posición
        Else
            SepararPalabras = SeleccionPalabras(Posicion)
        End If
    End If
   
End Function
Avatar de Usuario
por
#261169
Hola compañero,

Me da un error de compilación ... y no encuentro el error en la función.

Perdona las molestias ;)

wenner escribió:Prueba esta otra:

Código: Seleccionar todoFunction SepararPalabras(Texto As String, Posicion As Integer) As String
'___Devuelve la palabra según la posición que se indique, de izquierda a derecha
'___wenner, soloingeniería
    Dim n As Integer    'Contador de bucle
    Dim m As Integer    'Contador de bucle
   
    Dim MatrizPalabras() As String
    Dim SeleccionPalabras() As String
   
    If IsNumeric(Posicion) = False Then
        SepararPalabras = CVErr(xlErrNA)
    Else
        m = 0
        MatrizPalabras() = Split(Texto)
       
        For n = 0 To UBound(MatrizPalabras)
            If MatrizPalabras(n) Like "*#*" = True Then
                m = m + 1
                ReDim Preserve SeleccionPalabras(1 To m) As String
                SeleccionPalabras(m) = MatrizPalabras(n)
            End If
        Next

        If Posicion > m Then
            SepararPalabras = ""    'No devuelve ningún valor si no hay datos para esa posición
        Else
            SepararPalabras = SeleccionPalabras(Posicion)
        End If
    End If
   
End Function
Avatar de Usuario
por
#261180
Revisa el adjunto, no me da nigún error.
Regístrese y/o inicie sesión para ver archivos adjuntos.
Avatar de Usuario
por
#261186
wenner escribió:Revisa el adjunto, no me da nigún error.


I-M-P-R-E-S-I-O-N-A-N-T-E compañero!

Muchísimas gracias, de verdad.

Sólo a modo de consulta y ya para "adornarlo". ¿Existe la posibilidad de que en lugar de poner la posición, excel ya sacara automáticamente todos los valores en una columna independiente?

Un saludo.
Avatar de Usuario
por
#261190
Comenta si te sirve.
Regístrese y/o inicie sesión para ver archivos adjuntos.
Avatar de Usuario
por
#261195
wenner escribió:Comenta si te sirve.


¿¿¿Qué si me sirve??? Eres una máquina.

Oye, ¿tu te apellidas Gates o directamente programaste el Excel? Tremendo.

Muchas gracias compañero.

Un saludo.
Avatar de Usuario
por
#261204
wolfhuk escribió:
wenner escribió:Comenta si te sirve.


Muchas gracias compañero.


Me alegro que te siva.

Saludos,
Avatar de Usuario
por
#261216
wenner escribió:
wolfhuk escribió:
wenner escribió:Comenta si te sirve.


Muchas gracias compañero.


Me alegro que te siva.

Saludos,


Lo que yo te diga chaval. En este foro hay gente IMPAGABLE. :amo :amo :amo :amo :amo :amo :amo
Aunque a mí ahora no me has resuelto nada ya que nunca he tenido esta duda, pero, GRACIAS. :amo :amo :amo :brindis
Palabras clave
Temas similares

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

Permisos de mensaje

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro