EXTRAER CUALQUIER PALABRA DE UNA CADENA DE TEXTO

Hola de nuevo a todos 馃檪

Espero que hay谩is tenido unas estupendas vacaciones 馃檪 Yo ya las he finalizado y empiezo de nuevo con nuevas energ铆as.

En el post de hoy vamos a introducirnos en el mundo de las f贸rmulas para mostrar c贸mo podemos obtener (extraer) cualquier palabra que nos propongamos en una cadena de texto y con una 煤nica f贸rmula.

Vamos a imaginar que tenemos los siguientes datos y que queremos extraer el n煤mero de experimento, los grados y las atm贸sferas:

EXTRAER CUALQUIER PALABRA DE UNA CADENA DE TEXTO

Esto se puede realizar con una macro, siempre que contemos con la misma estructura, de lo contrario, en programaci贸n puede suponer un desarrollo mayor.

Para poder comenzar la extracci贸n solo vamos a necesitar una f贸rmula en la que combinaremos y anidaremos varias funciones. Para extraer la palabra que queremos, debemos conocer el n煤mero de ocupa en el texto, es decir: el n煤mero de experimento ser铆a la sexta palabra, los grados la octava y las atm贸sferas la onceaba.

La 煤nica particularidad es que en la estructura de la f贸rmula, debemos indicar siempre un n煤mero menos del que tiene la palabra a extraer, por ejemplo, para extraer el n煤mero de experimento, que es la sexta palabra, debemos indicar en la f贸rmula el 5:

=EXTRAE(EXTRAE(EXTRAE(SUSTITUIR(A2;" ";"*";5);1;LARGO(A2));ENCONTRAR("*";SUSTITUIR(A2;" ";"*";5));LARGO(A2));2;ENCONTRAR(" ";EXTRAE(EXTRAE(SUSTITUIR(A2;" ";"*";5);1;LARGO(A2));ENCONTRAR("*";SUSTITUIR(A2;" ";"*";5));LARGO(A2)))-2)

Solo debemos indicarlo en la funci贸n SUSTITUIR, (que os marco en rojo).

Para extraer los grados, debemos indicar el 7 en la f贸rmula, dado que la palabra ocupa el octavo lugar:

=EXTRAE(EXTRAE(EXTRAE(SUSTITUIR(A2;" ";"*";7);1;LARGO(A2));ENCONTRAR("*";SUSTITUIR(A2;" ";"*";7));LARGO(A2));2;ENCONTRAR(" ";EXTRAE(EXTRAE(SUSTITUIR(A2;" ";"*";7);1;LARGO(A2));ENCONTRAR("*";SUSTITUIR(A2;" ";"*";7));LARGO(A2)))-2)

Para extraer las atm贸sferas, debemos indicar el 10 en la f贸rmula, dado que la palabra ocupa el onceavo lugar:

=EXTRAE(EXTRAE(EXTRAE(SUSTITUIR(A2;" ";"*";10);1;LARGO(A2));ENCONTRAR("*";SUSTITUIR(A2;" ";"*";10));LARGO(A2));2;ENCONTRAR(" ";EXTRAE(EXTRAE(SUSTITUIR(A2;" ";"*";10);1;LARGO(A2));ENCONTRAR("*";SUSTITUIR(A2;" ";"*";10));LARGO(A2)))-2)

El resultado, despu茅s de aplicar la f贸rmula en cada columna, es el siguiente:

EXTRAER CUALQUIER PALABRA DE UNA CADENA DE TEXTO1

Como hab茅is podido comprobar, hemos realizado un ejercicio muy habitual cuando trabajamos con cadenas de texto y sin tener que utilizar c贸digo. Adem谩s podemos trabajar aunque la estructura no sea igual en todos los casos, solo tenemos que indicar el n煤mero de la palabra que queremos extraer para conseguirlo.

Y esto ha sido todo por hoy, a煤n tengo bastante l铆o con las consultas pendientes y tengo que darle duro.

Como siempre, os dejo el archivo de ejemplo. Espero que os sea de utilidad 馃檪

Descarga el archivo de ejemplo pulsando en:聽EXTRAER CUALQUIER PALABRA DE UNA CADENA DE TEXTO

 

Anuncios

EXTRAER INFORMACI脫N ESPEC脥FICA DE UNA CADENA DE DATOS

Hace un par de d铆as recib铆 una consulta sobre un tema que hab铆a tratado en un post anterior:聽EXTRAER N脷MEROS Y TEXTO DE UNA CADENA DE DATOS ALFANUM脡RICA聽en el que realizaba un peque帽o proceso para extraer todos los elementos num茅ricos y alfab茅ticos contenidos en una cadena alfanum茅rica.

Pues bien, un lector me env铆o la siguiente consulta que reproduzco literalmente:

“Esta macro funciona perfecto, pero quisiera saber si se puede adecuar para que extraiga los datos num茅ricos de est茅n definidos con el s铆mbolo $
Ejemplo: tengo un texto de la siguiente forma ADFR45FGF$4510ASD3 Solo se necesita que la formula extraiga el valor de $4510 y que no tenga en cuenta los dem谩s datos num茅ricos ni alfab茅ticos.”

As铆 pues, lo que necesitamos es una macro que sea capaz de extraer determinada informaci贸n dentro de una cadena de texto: 聽en este caso el s铆mbolo “$” y los siguientes caracteres num茅ricos consecutivos, y en caso de ser una letra (u otro caracter no num茅rico), simplemente no extraer nada.

Para realizar este trabajo debemos pensar y echar mano de funciones como “hallar” para determinar en el lugar de la cadena en el que se encuentra “$”, o lo que es lo mismo, en VBA la funci贸n “Search”. Una vez que tenemos este dato, resulta sencillo generar un c贸digo que permita extraer los datos hasta llegar al d贸lar y condicionando a que lo que extraemos sea num茅rico.

El 煤ltimo paso es invertir los datos extra铆dos, y ya tenemos la informaci贸n.

Os dejo aqu铆 la funci贸n ya comentada en cada uno de los pasos:

Function extrae_cadena(Micelda As String)
Dim numeros As String, i As Integer, j As Integer
Dim largo As String
'contamos hasta el $
dolar = Application.WorksheetFunction.Search("$", Micelda)
'extraemos los datos desde el dolar en adelante
largo = Trim(Mid(Micelda, dolar, 1000))
'iniciamos bucle para extraer los caracteres de la cadena anterior
fin = Len(largo)
For i = fin To 1 Step -1
'si es $ o n煤mero lo extraemos, pero si es letra no extraemos
If (Mid(largo, i, 1)) = "$" Or IsNumeric((Mid(largo, i, 1))) Then
numeros = numeros & Mid(largo, i, 1)
Else
numeros = ""
End If
Next
'invertimos el orden de los datos con otro bucle secundario
sCadena = Len(numeros)
For j = 1 To sCadena
Resultado = Mid(numeros, j, 1) & Resultado
Next j
'y ya tenemos la informaci贸n
extrae_cadena = Resultado
End Function

Con esta funci贸n ya podemos extraer los datos de forma directa, tecleando en una celada la funci贸n “extrae_cadena()” y seleccionando la celda que contiene los datos.

extraer-informacion-especifica-de-una-cadena-de-datos1

Tambi茅n lo pod茅is automatizar con una macro, para darle al bot贸n y que se extraigan los datos en la columna “B”:

Sub extrae_num()
'Ejecutamos proceso que recorre todos los datos
Dim c As Integer
With Sheets(1)
fin = Application.CountA(.Range("A:A"))
For c = 2 To fin
'Aplicamos formato texto a las celdas de la columna 2
.Cells(c, 2).NumberFormat = "@"
'aplicamos funcion extrae_cadena e insertamos resultado
.Cells(c, 2) = extrae_cadena(.Cells(c, 1))
Next
End With
End Sub

En ambos casos el resultado ser谩 el mismo, es decir extraeremos la informaci贸n seg煤n los datos que nos han solicitado:

extraer-informacion-especifica-de-una-cadena-de-datos2

Y he dejado la primera celda con los datos de la consulta del lector. El resultado es el solicitado:聽$4510

Es un peque帽o ejemplo, pero os puede ser de utilidad, dado que aqu铆 aunque usamos el $, se puede usar cualquier otro s铆mbolo, numero o par谩metro.

Os dejo como siempre el ejemplo:

Descarga聽el archivo pulsando en:聽EXTRAER INFORMACI脫N ESPEC脥FICA DE UNA CADENA DE DATOS