EXTRAER INFORMACIÓN ESPECÍFICA DE UNA CADENA ALFANUMÉRICA UTILIZANDO TEXTO EN COLUMNAS

Hace unos días os dejé un post de cómo se podía extraer información de una cadena de texto alfanumérica, utilizando varias funciones conseguíamos el dato que necesitábamos: EXTRAER INFORMACIÓN ESPECÍFICA DE UNA CADENA DE DATOS

Pues bien, me han vuelto a solicitar otra macro que sea capaz de extraer determinada información, el enunciado de la consulta es el siguiente:

Buenas! quisiera saber si se puede modificar el código de tal manera que permita extraer dos números diferentes que corresponden a diferentes cosas de una misma cadena de texto, y almacenarlas en dos celdas diferentes, por ejemplo: “las condiciones ambientales del experimento fueron 24,5 grados y 1,5 atmósferas ” poder extraer ambos datos y almacenarlos en celdas contiguas.

Bien, al igual que el post original, podríamos solucionar este problema de forma sencilla utilizando la siguiente macro, de hecho esta fue la macro que hice en ese momento:

Sub Extrae_numeros()
Dim i As Integer, j As Integer, Micelda As String, nCifra As Double
With Sheets("Hoja1")
fin = Application.CountA(.Range("A:A"))
For j = 2 To fin
Micelda = .Cells(j, 1)
For i = Len(Micelda) To 1 Step -1
If Not IsNumeric(Mid(Micelda, i, 1)) And Mid(Micelda, i, 1) <>"," Then Mid(Micelda, i, 1) = " "
Next
Micelda = Trim(Micelda)
nCifra = Application.WorksheetFunction.Search(" ", Micelda)
.Cells(j, 2) = Trim(Mid(Micelda, 1, nCifra)) * 1
.Cells(j, 3) = Trim(Mid(Micelda, nCifra, 10000)) * 1
Next
End With
End Sub

Como podéis ver la macro nos permite extraer las dos cifras y colocarlas en celdas contiguas. Es decir, que en principio realiza todo lo que necesitamos.

Pero después de analizarlo detenidamente, concluyo que este código tiene limitaciones importantes, es decir: no contempla los números negativos, los puntos, que sean más de dos cifras las que debemos extraer, etc.

En efecto, si el lector necesitase extraer 3 cifras tendría un problema, de hecho tendría que definir un nuevo punto (nCifra) desde el cual extraer la cuarta cantidad. Esto se puede hacer, pero tenemos otras formas más eficientes para obtener la información.

Os voy a presentar una macro que he programado para extraer cualquier cantidad que se encuentre en una cadena de texto y que permite colocar esos datos en celdas contiguas. Pero primero vamos a ver los datos que queremos extraer:

EXTRAER INFORMACIÓN DE UNA CADENA DE TEXTO UTILIZANDO TEXTO EN COLUMNAS

Y ahora la vamos a ver la macro:

Sub Extrae_numeros()
'Definimos variables
Dim i As Integer, j As Integer, n As Integer, fin As Integer
Dim nCampos As Integer, n_Colum As Integer
Dim miCelda 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 "B"
.Range(.Cells(2, 2), ActiveCell.SpecialCells(xlLastCell)).Select
Selection.ClearContents
'Iniciamos bucle para recorrar todas las filas
For j = 2 To fin
'Seleccionamos la fila
miCelda = .Cells(j, 1)
'Extraemos solo los números, los puntos, las comas y el signo - (si existen)
For i = Len(miCelda) To 1 Step -1
If Not IsNumeric(Mid(miCelda, i, 1)) And Mid(miCelda, i, 1) <> "," _
And Mid(miCelda, i, 1) <> "-" And Mid(miCelda, i, 1) <> "." Then Mid(miCelda, i, 1) = " "
Next
'Eliminamos espacios
miCelda = Trim(miCelda)
'Realizamos un segundo bucle y eliminamos todos los puntos, comas o signos - que aparezan antes de un
'carácter numérico
For n = Len(miCelda) To 1 Step -1
If Mid(miCelda, n, 1) = "," And Not IsNumeric(Mid(miCelda, n + 1, 1)) Then Mid(miCelda, n, 1) = " "
If Mid(miCelda, n, 1) = "." And Not IsNumeric(Mid(miCelda, n + 1, 1)) Then Mid(miCelda, n, 1) = " "
If Mid(miCelda, n, 1) = "-" And Not IsNumeric(Mid(miCelda, n + 1, 1)) Then Mid(miCelda, n, 1) = " "
Next
'Volvemos a eliminar espacios y ya tenemos la cadena de texto depurada.
.Cells(j, 2) = Trim(miCelda)
'Dimensionamos matrices con los datos que tenemos en miCelda
'para determinar las columnas de la función textToColumns
nCampos = Len(.Cells(j, 2))
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, 2).TextToColumns Destination:=Range("B" & 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
Next
.Cells(j, 1).Select
End With
End Sub

Con esta macro, iniciamos varios procesos que debemos comentar (aunque ya lo indico en el código). En primer lugar necesitamos realizar dos bucles, en el primero eliminamos los caracteres no numéricos excepto los puntos, las comas y el signo -.

Por ejemplo, para la primera frase, después de aplicar el primer bucle, nos quedamos con estos datos en la variable “miCelda”:  24,5          1,5
Efectivamente, hemos eliminado los caracteres no numéricos y hemos dejado las comas y los números:

For i = Len(miCelda) To 1 Step -1
If Not IsNumeric(Mid(miCelda, i, 1)) And Mid(miCelda, i, 1) <> "," _
And Mid(miCelda, i, 1) <> "-" And Mid(miCelda, i, 1) <> "." Then Mid(miCelda, i, 1) = " "
Next

Pero en el segundo bucle, si tuviésemos por ejemplo, puntos o comas o guiones que no tienen que ver con números, por ejemplo un punto y seguido o una coma, los eliminaríamos, dejando solo dichos caracteres cuando están incluidos en números:

For n = Len(miCelda) To 1 Step -1
If Mid(miCelda, n, 1) = "," And Not IsNumeric(Mid(miCelda, n + 1, 1)) Then Mid(miCelda, n, 1) = " "
If Mid(miCelda, n, 1) = "." And Not IsNumeric(Mid(miCelda, n + 1, 1)) Then Mid(miCelda, n, 1) = " "
If Mid(miCelda, n, 1) = "-" And Not IsNumeric(Mid(miCelda, n + 1, 1)) Then Mid(miCelda, n, 1) = " "
Next

Una vez que tenemos los datos totalmente depurados, solo queda utilizar el texto en columnas para, precisamente, colocar cada número en la columna contigua.

Cells(j, 2).TextToColumns Destination:=Range("B" & j), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True

Y de esta forma ya tendríamos la macro totalmente finalizada, ya podríamos extraer las cifras en cada cadena de texto y colocarlas en las columnas que automáticamente generará la función texto en columnas y aplicando formato “general”.

Pero imaginad que queréis aplicar formato texto o formato de fecha a los datos que vayáis a extraer. Para poder hacer eso, debemos trabajar con matrices, dimensionando los campos a que vamos a pasar a cada columna y aprovechando para indicar el formato que queremos utilizar en cada uno de ellos:

nCampos = Len(.Cells(j, 2))
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

En este caso, el formato es general: iArray(1) = 1, si fuese texto, sería 2.

Por eso, ahora podemos especificar en el código “de texto en columnas” la información de los campos, es decir, podemos añadir que FielInfo sea igual a la matriz que hemos definido y dimensionado.

Cells(j, 2).TextToColumns Destination:=Range("B" & j), DataType:=xlDelimited, _
TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=True, Space:=True, FieldInfo:=miArray

Para finalizar, este sería el resultado de aplicar la macro:

EXTRAER INFORMACIÓN DE UNA CADENA DE TEXTO UTILIZANDO TEXTO EN COLUMNAS1.jpg

Hemos extraído todas las cifras, conservando puntos, comas y signos negativos. El resto de información de la cadena de texto, simplemente la hemos omitido.

Si no necesitáis darle un formato específico a texto en columnas, podéis eliminar la parte de la macro que hace referencia a las matrices y el FielInfo de la función, aunque yo lo conservaría.

Y aunque seguro que llegarán otras consultas con nuevos planteamientos, creo que esta macro es válida para un amplio abanico de situaciones y necesidades.

Descarga el archivo de ejemplo pulsando en: EXTRAER INFORMACIÓN ESPECÍFICA DE UNA CADENA ALFANUMÉRICA UTILIZANDO TEXTO EN COLUMNAS

 

Anuncios

CONECTAR BASE DE DATOS DE EXCEL UTILIZANDO HERRAMIENTA OLEBD Y SQL

Llevo varias semanas con ganas de escribir una actualización relacionada con la conexión de bases de datos entre varios archivos de Excel. No es la primera vez que realizo un post relacionado, el último sobre la posibilidad de conectar una base de datos de Access con Excel mediante la herramienta OLEBD, la entrada la podéis ver aquí.

Sin embargo, después de publicarla, algunas consultas de los lectores me pedían una solución similar para realizar la conexión entre dos archivos Excel. El motivo es que la solución que ofrece la cinta de opciones en la pestaña “Datos” no supone una solución tan robusta y en caso de tener que utilizar el archivo en otro equipo, pierde la conexión ODBC creada, puedes leer sobre este tipo de conexiones aquí.

Para realizar el siguiente ejercicio, utilizaré el objeto OLEBD y también echaré mano de un poco de programación SQL.

Como siempre, utilizaré un ejemplo práctico, vamos a suponer que tenemos una base de datos en Excel con la información de los empleados de unos grandes almacenes (para componer nombres os recomiendo un post relacionado, (ver aquí). Toda esta información está registrada en un archivo que denominaremos “EJEMPLO_IMPORTAR” y en la pestaña “DATOS”. Esta es la base de datos:

CONECTAR BASE DE DATOS DE EXCEL_1

Pues bien,  ahora supongamos que acabamos de abrir un nuevo archivo y que queremos importar la base de datos que se encuentra en “EJEMPLO_IMPORTAR”  a la primera hoja de nuestro nuevo archivo, que vamos a denominar “IMPORT”.

Para poder hacerlo utilizaremos el siguiente código, (lo pongo completo y comento aquellos fragmentos más importantes):

Sub CONECTAR_BBDD_EXCEL()
'Definimos las variables
Dim i As Double
Dim dfecha As Variant
Dim Dataread As ADODB.Recordset, obSQL As String
Dim cnn As ADODB.Connection
Dim bBien As Boolean
'Limpiamos información de la hoja "DATOS"
Actualizar = Application.CountA(Worksheets("IMPORT").Range("a:a"))
If Actualizar > 0 Then
Worksheets("IMPORT").Range("A1:U" & Actualizar).ClearContents
End If
'Si se produce un error en el proceso de importación, la macro finalizará y mostrará mensaje
On Error GoTo ControlError
bBien = True
'Iniciamos la conexión ADO
Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "DATA SOURCE= C:\Users\Segu\Documents\EJEMPLO_IMPORTAR.xls"
.Properties("Extended Properties") = "Excel 12.0; HDR=YES"
.Open
End With
'Indicamos los parámetros de la consulta SQL para importar la tabla completa
obSQL = "SELECT [DATOS$].*" & "FROM [DATOS$] "
'Procedemos a grababar los datos de la consulta
Set Dataread = New ADODB.Recordset
With Dataread
.Source = obSQL
.ActiveConnection = cnn
.CursorLocation = adUseClient
.CursorType = adOpenForwardOnly
.LockType = adLockReadOnly
.Open
End With
'Grabamos los cabeceros de cada columna
For i = 0 To Dataread.Fields.Count - 1
If IsDate(Dataread.Fields(i).Name) Then
dfecha = CDate(Dataread.Fields(i).Name)
Else
dfecha = Dataread.Fields(i).Name
End If
Worksheets("IMPORT").Cells(1, i + 1) = dfecha
Next
'Copiamos los datos de la consulta
With Worksheets("IMPORT").Select
Worksheets("IMPORT").Cells(2, 1).CopyFromRecordset Dataread
End With
With Cells
'Ajustamos ancho de columnas
.EntireColumn.AutoFit
'Alineamos al centro los datos.
.HorizontalAlignment = xlLeft
End With
Salir:
On Error Resume Next
'Si existe un error de conexión mostraremos el siguiente mensaje
If Not bBien Then
MsgBox "NO SE HA PODIDO ACTUALIZAR LA BASE DE DATOS, INTÉNTALO MÁS TARDE."
End If
Exit Sub
'Salimos del proceso
ControlError:
bBien = False
Resume Salir
End Sub

Una vez hemos visto el código, cabe resaltar los siguientes procedimientos. En primer lugar los parámetros de la conexión:

Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.ConnectionString = "DATA SOURCE= C:\Users\Segu\Documents\EJEMPLO_IMPORTAR.xls"
.Properties("Extended Properties") = "Excel 12.0; HDR=YES"
.Open

Aquí debéis tener en cuenta el la fuente de datos que pongo (en rojo) es la ruta que existe en mi equipo, en el vuestro deberéis cambiarla según la ubicación del archivo.

Una vez que establecemos la conexión, debemos indicar los parámetros de la consulta, y es aquí donde jugaremos con la consulta SQL:

obSQL = "SELECT [DATOS$].*" & "FROM [DATOS$] "

Donde indicaremos que los datos que necesitamos son los que se encuentran en la pestaña “Datos” del archivo de referencia. Con esta sentencia importamos todos los datos incluidos en la hoja (excepto los datos de cabecera).

Para incluir los datos de cabecera, realizaremos otro pequeño proceso con un bucle For Next:

For i = 0 To Dataread.Fields.Count - 1
If IsDate(Dataread.Fields(i).Name) Then
dfecha = CDate(Dataread.Fields(i).Name)
Else
dfecha = Dataread.Fields(i).Name
End If
Worksheets("IMPORT").Cells(1, i + 1) = dfecha
Next

Para el ejemplo os dejo una carpeta con dos archivos, uno es en el que tenemos los datos que queremos importar (EJEMPLO_IMPORTAR) y otro (CONECTAR BASE DE DATOS DE EXCEL UTILIZANDO HERRAMIENTA OLEBD Y SQL) que es donde tenemos la macro y desde donde realizaremos la consulta.

No olvidéis indicar la ruta correcta del archivo “EJEMPLO_IMPORTAR”, de lo contrario os saltará el error “NO SE HA PODIDO ACTUALIZAR LA BASE DE DATOS, INTÉNTALO MÁS TARDE.”

Y para finalizar, si utilizáis otra hoja, no olvidéis indicar las referencias a las bibliotecas que utilizaremos:

CONECTAR BASE DE DATOS DE EXCEL_2

Y esto ha sido el ejercicio de hoy, un archivo que tenía muchas ganas de publicar. Es un recurso muy interesante para cuando trabajamos importando bases de datos de otros archivos de Excel.

El archivo de referencia, al estar en una carpeta lo he tenido que subir a Drive. Cuando pinchéis el enlace veréis los dos archivos, un con datos (que es la base que vamos a importar) y otro en blando, que es donde está la macro que debemos ejecutar.

Para finalizar me gustaría comentar que esta entrada la tuve que editar, el motivo es que inicialmente había utilizado el siguiente código para realizar la conexión:

Set cnn = New ADODB.Connection
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "DATA SOURCE= C:\Users\Segu\Documents\EJEMPLO_IMPORTAR.xls"
.Properties("Extended Properties") = "Excel 8.0; HDR=YES"
.Open

Evidentemente funciona correctamente, pero lo hace cuando estamos trabajando con Excel 2003 y con Excel 2010 (en modo compatibilidad) y ambos archivos son .xls. El motivo es que normalmente trabajo con excel 2010 en modo compatibilidad, y lo lógico es publicar un código que también contemple archivos .xlsx o .xlsm, tanto el archivo que se importa como el archivo en el que tenemos la macro.

Lo dicho, el proveedor Microsoft.Jet.OLEDB.4.0 funcionará en Excel 2003 o Excel 2010 en modo compatibilidad y siempre que sean ambos archivos .xls.

Dar las gracias al lector adoxcel, cuyos comentarios al probar el archivo me hicieron pensar en la necesidad de actualizar el código por uno más útil y con más posibilidades.

Descarga el archivo de ejemplo pulsando en: CONECTAR BASE DE DATOS DE EXCEL UTILIZANDO HERRAMIENTA OLEBD Y SQL

 

VINCULAR BASE DE DATOS ENTRE VARIAS HOJAS DE EXCEL

Hace tiempo escribí una entrada relacionada con la posibilidad de conectar una base de datos de Access con excel mediante un procedimiento de VBA, fue un ejemplo importante y uno de los post más visitados y descargador de Excel Signum.

Hoy quiero trabajar un poco el tema de vinculación de datos y ofrecer la posibilidad de hacerlo sin necesidad de código de programación y entre archivos de Excel. El ejemplo es claro, imaginad que tenéis una hoja de excel con una serie de datos y de la que habitualmente extraéis información para trabajar pero que necesitáis llevar esos datos a otra hoja o a otro libro. Esto se puede conseguir utilizando las herramientas de las que disponemos en la cinta de opciones de Excel.

Voy a utilizar un archivo que ya conocéis de otros ejemplos, una base de datos con la población de municipios de España:

POBLACIONES_1

Esta información la tenemos en la hoja1 de nuestro archivo y necesitamos vincularla y llevarla a la hoja3 de ese mismo libro. ¿cómo lo hacemos?.

En primer lugar pulsamos en la pestaña “Datos” de la cinta de opciones de Excel y a continuación pulsamos en “Conexiones”, luego se nos abrirá un cuadro de diálogo que nos va a mostrar todas las conexiones que tiene nuestra hoja (en este caso no tiene ninguna), por lo que vamos a pulsar en “Sumar” para buscar conexiones que tengamos en nuestro equipo y pulsamos en “Examinar en busca de más…”. Os dejo en imágenes lo comentado hasta ahora:

POBLACIONES_2
Una vez que pulsamos en “Examinar en busca de más…” aparecerá otro cuadro de diálogo donde se nos indica que seleccionemos un archivo de origen de datos. En mi ejemplo, ese archivo se llama “Poblaciones” y está ubicado en “Mis Documentos”, a continuación pulsamos en “Abrir”

POBLACIONES_3
Cuando pulsamos en “Abrir” vamos a ver el archivo de Excel que hemos seleccionado. Es importante seleccionar la hoja en donde se encuentran los datos a vincular. En este ejemplo los datos están en la Hoja1:

POBLACIONES_4
Una vez que pulsemos aceptar ya tendremos los datos del archivo “POBLACIONES” vinculado a nuestro libro y podremos descargar los datos en cualquier hoja:

POBLACIONES_5

Para descargar los datos tan solo tenemos que ir a la pestaña de “Datos” de Excel y pulsar en “Conexiones existentes” y nos apareceré la nueva conexión que hemos creado, “POBLACIONES”. Una vez que la abramos, nos aparecerá un cuadro de diálogo donde podremos escoger si queremos los datos como una tabla, como un informe de tabla dinámica o como un informe de gráfico y también el lugar de la hoja en el que queremos que se muestren los datos:

POBLACIONES_6

En este ejemplo, seleccionaré “ver como Tabla” y la mostraré a partir de la celda A1. Como podéis ver, son los mismos datos que la tabla de la hoja1, solo que ahora los podemos llevar a cualquier hoja. Además cualquier cambio en la tabla inicial, la de la hoja1 se reflejará en las que están vinculadas. Si realizáis cambios en la tabla principal y queréis que se relfjen en el resto debéis pulsar en el comando “Actualizar” y los cambios quedarán reflejados.

POBLACIONES_7

Este tipo de vinculaciones son muy útiles cuando trabajamos con bases de datos que extraemos de otros programas o base de datos y con los que periódicamente trabajamos. Tan solo tendríamos que pegar la nueva base de datos en la hoja principal de la que se alimentan el resto de tablas, es decir, para este ejemplo, la hoja1.

Aunque siempre suelo dejar el ejemplo del ejercicio que he realizado, en este caso solo puedo dejar la base de datos. No es posible descargar el ejercicio completo dado que para que funcione lo tenéis que vincular a un directorio de vuestro ordenador. Por ello os animo a descargar la base de datos y realizar el ejercicio con el post como si fuese un tutorial.

Descarga el archivo de ejemplo pulsando en: VINCULAR BASE DE DATOS

LISTA DESPLEGABLE O CUADRO COMBINADO ¿QUÉ DEBEMOS USAR?

Cuando trabajamos con Excel muchas veces tenemos que hacer uso de los cuadros combinados para ofrecer la posibilidad al usuario de que pulsando en una celda se va a abrir un desplegable y va a poder seleccionar el item que necesite.

Este trabajo se puede realizar usando dos herramientas, o bien usar una lista desplegable o bien insertar un cuadro combinado. El resultado es el mismo, pero hay diferencias importantes que debemos tener en cuenta.

Imaginad que tenemos una librería y estamos confeccionando una hoja Excel para que pulsando en un celda nos muestre un desplegable con todos los artículos. Lo primero que vamos a hacer es colocar una lista desplegable, para ello en una columna cualquiera ponemos los artículos de la librería:

LISTA DESPLEGABLE_CUADRO COMBINADO_1

A continuación nos ponemos sobre una celda cualquiera, en este caso la B3 y pulsamos la pestaña de “Datos” en la cinta de opciones y seguidamente en la opción “Validación de datos“. Aparecerá un nuevo cuadro de control en el que debemos seleccionar “Lista” (vamos a hacer referencia a una lista de artículos) y en “Origen” seleccionamos con el cursor de la celda de la celda E2 a la E9, (esta última debe estar en blanco).

LISTA DESPLEGABLE_CUADRO COMBINADO_2

Al pulsar “aceptar”, ya tendremos configurada correctamente la celda que hemos seleccionado para que muestre la lista desplegable. Si pulsamos encima ahora mostrará todos los artículos y la celda en blanco que habíamos seleccionado sirve para dejar el formulario en blanco. Así es como queda:

LISTA DESPLEGABLE_CUADRO COMBINADO_3

El detalle que he marcado en Rojo aparece una vez que seleccionamos la celda, si no la pulsamos no aparece. Esta es una de las características de las listas desplegables que no me gusta, porque hace que el usuario no detecte correctamente donde tiene que pulsar para seleccionar, y nos obliga a tener que aclararlo nosotros mediante texto:

LISTA DESPLEGABLE_CUADRO COMBINADO_4

Sin embargo, a pesar de esta limitación, si vamos a trabajar nuestra hoja con fórmulas, esta opción es la más óptima, pues nos permite hacer referencia al contenido de la fórmula a través de la lista desplegable.

Ahora os pondré el mismo ejemplo pero usando un cuadro combinado. Para ello pulsamos en la pestaña “Programador” y en opción “Insertar“, a continuación nos aparecerán varios iconos, tendremos que seleccionar el que pone “Cuadro Combinado“, una vez seleccionado, nos aparecerá el cuadro combinado, que a diferencia de la lista desplegable sí se intuye perfectamente donde tenemos que pulsar para que despliegue la información.

Una vez que tenemos el cuadro combinado en la hoja de Excel, debemos seleccionarlo y pulsar el botón derecho del ratón y luego pulsar en “Formato de control“, así:

LISTA DESPLEGABLE_CUADRO COMBINADO_6

Y nos aparecerá la siguiente ventana, en la que debemos seleccionar la pestaña “Control” y, al igual que en el ejemplo anterior, seleccionar el rango de celdas en las que se encuentran los artículos, opcionalmente podemos marcar que “sombreado en 3D” para resaltar el aspecto.

LISTA DESPLEGABLE_CUADRO COMBINADO_7

Pulsamos en aceptar y listo, ya hemos creado nuestro cuadro combinado.

Para finalizar, podemos ocultar la columna de los artículos y tendremos dos ejemplos de como mostrar datos con desplegables.

Ahora bien, como he comentado, si vamos a trabajar con fórmulas en la hoja la mejor opción será la lista desplegable,  dado que podremos hacer referencia al contenido la celda sin necesidad de programar. Si no vamos usar fórmulas o vamos a utilizar macros y VBA, la mejor opción es el cuadro combinado.

No hay una herramienta mejor, sino que depende del entorno donde la vayamos a usar.

Espero en breve hacer una entrada profundizando un poco acerca de listas desplegables dependientes y cuadros combinados dependientes. Por hoy, creo que está bastante bien 🙂

Descarga el archivo pulsando enLISTA DESPLEGABLE Y CUADRO COMBINADO

 

 

SEPARAR NOMBRE Y APELLIDOS EN EXCEL. HERRAMIENTA TEXTO EN COLUMNAS

Unas de las tareas más tediosas cuando se trabaja con bases de datos suele ser el recibir archivos de texto o información no tratada adecuadamente.

Un ejemplo clásico es el de encontrarse con un listado de personas con apellidos y nombre (en ese orden) cuando lo que necesitas es nombre y apellidos. Esto puede ser un problema si hablamos de listados con miles de registros.

Si bien existen múltiples formas para hacerlo con formulación o con macros, hoy os presento una herramienta que lo hace muchísimo más sencillo, la herramienta de Texto en Columnas.

Imagina que tienes esta información y debes poner la información al revés, es decir, nombre y apellidos:

Para hacerlo debes seleccionar toda la columna y luego pulsar en Texto en columnas:

Automáticamente nos aparecerá un cuadro de diálogo, que nos va a guiar en tres pasos para separar el nombre de los apellidos y colocarlo en otra columna. Debemos pulsar “siguiente” en el paso 1 y en el paso 2 seleccionar “tabulación” y “coma”, dado que son los separadores actuales entre apellidos y nombre:

Pulsamos siguiente y en el paso 3 y finalizamos.

El resultado es este:

Como habéis visto, resulta muy sencillo separar el nombre. Esto siempre funcionará cuando tengamos un criterio que divida cada elemento, ya sean comas, puntos, espacios, etc,

Ahora solo hay que volver a componer el nombre de la forma que nos hace falta, y lo haremos con una fórmula muy sencilla. Concatenar.

=CONCATENAR(C2;" ";B2)

Donde C2 es el nombre, las comillas con el espacio entre el nombre y los apellidos y B2 son los apellidos.

Y con esta solución tendremos el problema resuelto en pocos minutos.

Espero que esta solución os resulte útil para vuestros trabajos del día a día.

Saludos!!