Macro que obtenga resultado a partir de 5 criterios específicos en Excel.

Tengo una tabla de Excel en la que necesito obtener un resultado a partir de 5 criterios específicos, que pueden tener combinaciones entre sí.

En la tabla tengo información desde la columna A hasta la columna AD, y puede tener hasta "n" numero de filas. Pero la información que necesito se encuentra en las columnas P, Q, R, S y U, (por ahora).

Necesito una macro que recorra cada fila, lea la información en ella, me ayude a calcular un resultado específico para estas posibles combinaciones y lo coloque en la columna AE en la fila correspondiente. Por ejemplo, la información la podemos encontrar así:

Si es:

SW / SW / 2” / 80S / STAINLESS STEEL = 1

SW / SW / 2” / 80 / CARBON STEEL = 2

SW / BW/ 4” / STD / CABRON STEEL = 2.5

FW / SW / ¾” / 80 / CARBON STEEL = 3

SW / BW / 4” / 80 / CARBON STEEL = 3.5

SW(OLET) / BW / 4” / STD / CARBON STELL = 4

SW / BW / 3” / 160 / CARBON STEEL = 4.5

DATO: En la columna S, solo me interesa todo lo que este después de las palabras “SCH”, con eso se puede identificar esa celda.

Esta información ira creciendo en un futuro, agregando mas posibles combinaciones, con diferentes letras y números, al igual que la cantidad de filas, pero las columnas permanecerán.

He Tratado con macros de concatenación y de IF sobre IF, pero no logro que recorra cada fila, de toda la tabla, buscando la información y me arroje el resultado.

Respuesta
2

Para tener una configuración de criterios y poder resolver esto:

Esta información ira creciendo en un futuro, agregando mas posibles combinaciones, con diferentes letras y números

Vamos a crear una hoja de "Criterios". Entonces crea una hoja de criterios y pon los siguientes datos:

En la fila 2 pon las columnas que van a tener un criterio, por ejemplo P, Q, R, S, U. Puedes agregar más columnas.

Empieza a crear los criterios en la fila 3.

El valor correspondiente lo pones en la columna A.


Ahora ejecuta la siguiente macro:

Sub Buscar_Criterios()
'Por Dante Amor
    '
    'Macro que obtenga resultado a partir de criterios específicos
    '
    Application.ScreenUpdating = False
    Application.StatusBar = False
    Set h1 = Sheets("Base")
    Set h2 = Sheets("Criterios")
    '
    u1 = h1.Range("P" & Rows.Count).End(xlUp).Row
    For i = 2 To u1
        Application.StatusBar = "Procesando fila : " & i & " De : " & u1
        For j = 2 To h2.Range("A" & Rows.Count).End(xlUp).Row
            existe = True
            For k = 2 To h2.Cells(2, Columns.Count).End(xlToLeft).Column
                col = h2.Cells(2, k).Value
                If col = "S" Then
                    n = InStr(1, h1.Cells(i, col).Value, "SCH")
                    dato = Mid(h1.Cells(i, col).Value, n + 4)
                    If IsNumeric(dato) Then dato = Val(dato)
                    If dato <> h2.Cells(j, k).Value Then
                        existe = False
                        Exit For
                    End If
                Else
                    If h1.Cells(i, col).Value <> h2.Cells(j, k).Value Then
                        existe = False
                        Exit For
                    End If
                End If
            Next
            If existe Then
                h1.Cells(i, "AE").Value = h2.Cells(j, "A").Value
                Exit For
            End If
        Next
    Next
    Application.ScreenUpdating = True
    Application.StatusBar = False
    MsgBox "Fin"
End Sub

Es importante observar el criterio de búsqueda de la columna "S", su forma de comparación es diferente a las otras columnas

                If col = "S" Then
                    n = InStr(1, h1.Cells(i, col).Value, "SCH")
                    dato = Mid(h1.Cells(i, col).Value, n + 4)
                    If IsNumeric(dato) Then dato = Val(dato)
                    If dato <> h2.Cells(j, k).Value Then
                        existe = False
                        Exit For
                    End If

Si tienes algo similar con alguna otra columna, entonces se tendría que modificar la macro.


'.[Sal u dos. Dante Amor. No olvides valorar la respuesta. 

Hola Dante, buen día y gracias por tu respuesta, coloque los datos con las indicaciones que me proporcionaste, pero me esta marcando un error en la siguiente linea: 

También le cambie el nombre a los encabezados de las columnas con los nombres de los de la hoja Base, pero me manda el mismo error. Gracias. 

En la hoja de "criterios" tienes que poner la letra de la columna.

¿Qué dice el mensaje de error?

¿Modificaste algo en la macro?

No le modifique a la macro, y en los encabezados de las columnas de la hoja criterios, coloque la letra de la columna donde esta la información en la hoja base.El mensaje de error que me envía es:

Run-time error "13" type mismatch.

Los encabezados tienen que estar como mi ejemplo:

Revisa que no haya espacios ni antes ni después de cada letra.

Revisa que tengas "P" en lugar de " P ", revisa cada letra

También on la macro completa, para ver si se movió algo.

Dante, buenos días! Te agradezco mucho tu aporte, ayer por la noche tuve la oportunidad de correr la macro y funciono correctamente, en la pestaña criterio, me estaba mostrando los encabezados con otro formato, aunque mostraba la letra, no corría, solo lo modifique y funciono, parecía que estaba correcto, pero ese detalle me detenía. 

Ahora ya muestra el resultado que buscaba, muchísimas gracias, por tu tiempo y esfuerzo. 

1 respuesta más de otro experto

Respuesta
1

¿Y tiene que ser con macro?

Podrías crear un catálogo como en la imagen, celdas en verde, y luego con buscarv asignarle el número correspondiente.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas