Buscar por filas en una base, una variable, y si coincide ingresa un resultado en otra columna de esa misma fila

Quisiera me ayuden con una macro que busque en una base, de 5 columnas, 3 variables, que puede estar en cualquiera de las 5 columnas pero puede ser que la variable aparezca en una celda pero con otra(s) palabra(s), (es decir la búsqueda es por parte y no exacta); y que en la fila que coincida la búsqueda ingrese en una 6ta columna un resultado según la variable.

Ej:

Si localiza en una fila la palabra "fresa" (Variable1) en la columna 6 aparece "ROJO"

Si localiza en una fila la palabra "uva" (Variable2) en la columna 6 aparece "PURPURA"

Si localiza en una fila la palabra "banana" (Variable3) en la columna 6 aparece "AMARILLO"

Si no localiza en una fila ninguna de las variables en la columna 6 queda vacía.

PD:

La base puede tener unas 150 líneas (por si hay que considerar tiempos de ejecución)

Las variables nunca coinciden en la misma línea.

1 Respuesta

Respuesta
1

Esta macro hace lo que pides. Estoy suponiendo que el rango es desde A2 hasta la última fila de datos de la columna E y pone el resultado en la columna F.

Sub Busca_Cadenas()
'Por Marcial Castro
col = "A" 'Columna donde comienza el Rango de búsqueda'
nCol = 1  'Número de la columna del rango de búsqueda'
colRes = "F" 'Columna para los resultados'
For t = 2 To Range(col & Rows.Count).End(xlUp).Row
    For j = nCol To nCol + 4: cadena = cadena + Cells(t, j): Next j
    If InStr(1, cadena, "fresa") Then
        Cells(t, colRes) = "ROJO"
        ElseIf InStr(1, cadena, "uva") Then
            Cells(t, colRes) = "PURPURA"
                ElseIf InStr(1, cadena, "banana") Then Cells(t, colRes) = "AMARILLO"
    End If
cadena = ""
Next t
End Sub

Si quieres utilizar otras columnas, cambia las líneas

col = "A" 'Columna donde comienza el Rango de búsqueda'
nCol = 1 'Número de la columna del rango de búsqueda'
colRes = "F" 'Columna para los resultados'

Si te ha valido la respuesta.

Gracias Marcial por la pronta respuesta, sin embargo la programación me dio error en "Next j" no se si es cuando concatena porque corre bien cuando le quito el "+ 4" (que no es la idea). Sabes porque a que se debe?

También quisiera saber si se puede clasificar la base a partir de la ultima clasificación, es decir que busque en F la última celda con datos y que a partir de ahí vuelva a ejecutar la busqueda con resultados por filas.

Saludos cordiales

A mi funciona correctamente. Envíame el fichero y te digo.

Explícame esto en el fichero "También quisiera saber si se puede clasificar la base a partir de la ultima clasificación, es decir que busque en F la última celda con datos y que a partir de ahí vuelva a ejecutar la busqueda con resultados por filas."

No encontré donde adjuntar el archivo, te paso las imágenes o me puedes dar tu correo para enviarte el archivo.

el correo [email protected]

Aquí tienes la macro funcionando correctamente:

Sub Busca_Cadenas()
'Por Marcial Castro
col = "C" 'Columna donde comienza el Rango de búsqueda'
nCol = 1 'Número de la columna del rango de búsqueda'
colRes = "H" 'Columna para los resultados'
    'El bucle va desde la fila siguiente a la última fila con datos,'
    'de la columna colRes, hasta la última fila con datos de la columna A.'
    'Con esto se consigue la segunda parte de lo que necesitas'
    'OJO: Ten en cuenta que la hoja3, la columna colRes es la I, no la H, debes cambiarlo'
    For t = Range(colRes & Rows.Count).End(xlUp).Row + 1 To Cells.SpecialCells(xlLastCell).Row
        'Desde la columna 1 hasta la última con datos'
        For j = nCol To Cells.SpecialCells(xlLastCell).Column
            cadena = cadena + CStr(Cells(t, j)) 'El problema era por la conversión de los datos'
        Next j
        If InStr(1, cadena, "fresa") Then
            Cells(t, colRes) = "ROJO"
            ElseIf InStr(1, cadena, "uva") Then
                Cells(t, colRes) = "PURPURA"
                    ElseIf InStr(1, cadena, "banana") Then Cells(t, colRes) = "AMARILLO"
        End If
    cadena = ""
    Next t
End Sub

Si te ha valido la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas