EXTRAER INFORMACIÓN DE UNA CADENA ALFANUMÉRICA EN FUNCIÓN DE VARIOS CRITERIOS

Hola a todos!, ¿qué tal estáis?, espero que muy bien.

Hace tiempo, desarrollé una macro que permitía extraer determinados caracteres de una cadena de texto y utilizar la función “texto en columna” programada en VBA para mostrar la información: EXTRAER INFORMACIÓN ESPECÍFICA DE UNA CADENA ALFANUMÉRICA UTILIZANDO TEXTO EN COLUMNAS

Pues bien, hoy me ha llegado una consulta en la que me solicitaban modificar la macro para poder extraer en una cadena de texto, de dos en dos caracteres, según un número de veces indicado en una columna.

Es decir, imaginad que tenéis en una celda esta cadena de número y letras: 57e87d54222 y en una columna se especifica el número 4, por lo que hemos de extraer de dos en dos los cuatro primeros pares, así: 57 e8 7d 54

Aunque pueda parecer algo poco común, en realidad lo es, porque muchas veces la información se almacena en un cadena (de texto o numérica, o ámbas) y luego es necesario extraerla de alguna forma.

En fin, que lo mejor es ver la macro donde explico cómo lo hago:

Option Explicit
Sub Extrae_Varios()
'Definimos variables
Dim i As Integer, j As Integer, n As Integer, fin As Integer
Dim nCampos As Integer, n_Colum As Integer, nCasos As Integer
Dim nCadena As String, sCadena As String
Dim miArray As Variant, iArray As Variant
'Iniciamos la macro
With Sheets("DATOS")
Application.ScreenUpdating = False
fin = Application.CountA(.Range("A:A"))
'Borramos información a partir de la columna "C"
.Range(.Cells(2, 3), ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
'Iniciamos bucle para recorrer todas las filas
For j = 2 To fin
'Seleccionamos numero de casos y cadena de texto
sCadena = .Cells(j, 2)
nCasos = .Cells(j, 1) * 2
'componemos nueva cadena de dos en dos
For i = 1 To nCasos Step 2
nCadena = nCadena & " " & Mid(sCadena, i, 2)
Next
'Eliminamos espacios en blanco al principio
.Cells(j, 3) = Trim(nCadena)
'Dimensionamos matrices con los datos que tenemos
'para determinar las columnas de la función textToColumns
nCampos = Len(.Cells(j, 3))
nCampos = nCampos - 1
ReDim miArray(0 To nCampos)
For n_Colum = 0 To nCampos
ReDim iArray(0 To 1)
iArray(0) = n_Colum + 1
iArray(1) = 1
miArray(n_Colum) = iArray
Next n_Colum
'Aplicamos la función texto en columnas a partir de la segunda columna
'delimitamos el texto en caracteres (en este ejemplo utilizamos los espacios).
Cells(j, 3).TextToColumns Destination:=Range("C" & j), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True, FieldInfo:=miArray
'Indicamos que todas las matrices tengan formato general, pero podríamos indicar que sea número, etc
nCadena = vbNullString
Next
.Cells(j, 1).Select
End With
End Sub

El resultado de la macro es el siguiente:

EXTRAER INFORMACIÓN DE UNA CADENA ALFANUMÉRICA EN FUNCIÓN DE VARIOS CRITERIOS

Como podéis observar, extraemos la información de dos en dos y colocamos cada par en una celda diferente.  Si necesitáis incrementar a tres, cuatro, etc, solo tenéis que modificar la macro y lo tendréis resuelto.

Descarga el archivo de ejemplo pulsando en: EXTRAER INFORMACIÓN DE UNA CADENA ALFANUMÉRICA EN FUNCIÓN DE VARIOS CRITERIOS

¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!

Anuncios

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

 
¿Te ha resultado de interés?, puedes apoyar a Excel Signum con una pequeña donación.

Donate Button with Credit Cards

¡¡Muchas gracias!!