30 septiembre, 2023

MÉTODO FIND COMBINADO CON INSTRUCCIÓN SELECT CASE O FUNCIÓN REPLACE. ENCONTRAR Y REEMPLAZAR

Hola a todos!

Como todos sabéis Excel es mucho más fórmulas y celdas, Excel nos permite programar prácticamente todo lo que nos propongamos. Y aunque en muchas ocasiones escuchéis o leáis que Excel no es adecuado para realizar tareas relacionadas con las bases de datos o tratamientos automatizados de información, lo cierto es que sospecho que las personas que realizan esos comentarios no conocen el poder de Excel, de otra forma su opinión sería distinta.

El tema del post de hoy viene relacionado precisamente con el tratamiento de bases de datos. Es muy habitual que cuando importamos una base de datos, ya sea desde un archivo TXT, CSV, .accdb o cualquier otro, algunos de los campos que nos aparecen vienen resumidos con códigos o abreviaturas, el motivo suele ser que el largo de los campos de registro en el programa que captura la información solo permiten una cierta cantidad de caracteres y es necesario abreviar o utilizar códigos.

Un ejemplo clásico es, por ejemplo abreviar cuando se describe el campo de género (Mujer=M o F y Hombre=H o M o V), o (Casado=C, Soltero=S). Pues bien, para «decodificar» estos códigos, existen multitud de soluciones, la primera y más obvia es la de modificar en el propio código de la herramienta que exporta los datos y «escribir» correctamente la información. Pero muchas veces esto no es posible, o bien el programa es muy antiguo y carece de mantenimiento, o simplemente no es posible realizar un desarrollo para modificar estos campos.

La solución queda entonces en el «tejado» de Excel que es quien recibe la información. Supongamos entonces que hemos recibido un campo con nombres de personas y el género establecido de la siguiente forma:

METODO FIND COMBINADO CON INSTRUCCION SELECT CASE O FUNCION REPLACE

Bien, para modificar esta información y por ejemplo poner HOMBRE o MUJER podemos realizar esta tarea de varias formas, podríamos realizarlo con SQL directamente, con condicionales sobre la columna indicada, pero también podemos hacerlo utilizando el método find para encontrar el campo y la columna que queremos cambiar (esto es interesante cuando los datos que recibimos pueden cambiar de estructura y posición de campos).

Pero el método find solamente nos sirve para localizar el campo, para poder modificar los valores lo podemos hacer de una forma bastante eficiente utilizando una instrucción SELECT CASE o recurriendo a la función REPLACE. A continuación os mostraré dos códigos, cada uno de ellos desarrollará una de las dos alternativas.

  • Método FIND con la instrucción SELECT CASE, este sería el código que os propongo:

Sub Seleccion_Caso()
'Declaramos variables
Dim Final As Double, i As Double
Dim nCampo As Object, sItem As Object
Dim sDato As String, nCol As Long
'Con la hoja1
With Sheets("Hoja1")
Final = Application.CountA(.Range("A:A"))
'Indicamos la búsqueda en la primera fila
Set nCampo = .Range("1:1")
Set sItem = nCampo.Find("Género")
'Si encontramos el dato, guardamos el número de columna
nCol = sItem.Column
'Mediante un for recorremos todos los ítems del campo seleccionado
For i = 2 To Final
'Con un Select Case vamos sustituyendo los datos
sDato = .Cells(i, nCol)
Select Case sDato
Case "H"
.Cells(i, nCol) = "HOMBRE"
Case "M"
.Cells(i, nCol) = "MUJER"
End Select
Next i
End With
End Sub

Como podéis observar, mediante la instrucción Select Case procedemos a realizar los cambios que necesitamos. Es necesario utilizar un loop for-next para que el select pueda evaluar cada celda (o ítem).

El resultado es este:

METODO FIND COMBINADO CON INSTRUCCION SELECT CASE O FUNCION REPLACE1

  • Método FIND con la función REPLACE, este sería el otro código que os propongo:

Sub Reemplazar()
'Declaramos variables
Dim Final As Double, i As Double
Dim nCampo As Object, sItem As Object
Dim sDato As String, nCol As Long
'Con la hoja1
With Sheets("Hoja1")
Final = Application.CountA(.Range("A:A"))
'Indicamos la búsqueda en la primera fila
Set nCampo = .Range("1:1")
Set sItem = nCampo.Find("Género")
'Indicamos la búsqueda en la primera fila
nCol = sItem.Column
'Seleccionamos toda la columna
Columns(nCol).Select
'Con un replace reemplazamos los datos elegidos
With Selection
.Replace What:="HOMBRE", Replacement:="H", LookAt:=xlWhole
.Replace What:="MUJER", Replacement:="M", LookAt:=xlWhole
End With
sItem.Select
End With
End Sub

Con este método para probarlo, realizaremos la inversa, es decir, si es HOMBRE se indicará una H, y si es MUJER una M.

Y volveremos a tener la misma información que al principio:

METODO FIND COMBINADO CON INSTRUCCION SELECT CASE O FUNCION REPLACE

De estos dos códigos, me gusta utilizar el primero con el select case, dado que me permite introducir al final de la instrucción un «else» si fuese necesario y así contemplar otros valores que no sean los que hemos establecidos. Sin embargo debo reconocer que el segundo código es más rápido al utilizar la función REPLACE.

Pues esto ha sido todo, espero que os haya resultado de interés y os ayude con vuestras automatizaciones.

Descarga el archivo de ejemplo pulsando en: MÉTODO FIND COMBINADO CON INSTRUCCIÓN SELECT CASE O FUNCIÓN REPLACE

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

Donate Button with Credit Cards

¡¡Muchas gracias!!

Mediante la suscripción al blog, la realización comentarios o el uso del formulario de contacto estás dando tu consentimiento expreso al tratamiento de los datos personales proporcionados según lo dispuesto en la ley vigente (LOPD). Tienes más información al respecto en esta página del blog: Política de Privacidad y Cookies

Comparte este post

Si te ha gustado o tienes alguna duda, puedes dejar aquí tu comentario.

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies