¿Cómo convierto lo siguiente en código macro vba? =ÍNDICE(CLASIFICACIÓN,COINCIDENCIA(VERDADERO,ES NÚMERO(BUSCAR(NOMBRES,O12)),0))
Tengo una columna (O) en la Hoja1 en la que es necesario buscarla. Tengo dos columnas en la hoja2 que está definida con un nombre (Nombres y Clasificación). Cuando se encuentra un nombre en la columna O de la Hoja 1, la Columna P tiene el valor correspondiente de la clasificación de la Hoja 2
Hoja 1 Columna O el nombre de nuestro cliente es John Doe
Hoja 2 Nombre Clasificación John Doe Clase A
La columna P de la Hoja 1 tendrá el valor Clase A
¡Por favor ayuda!
Respuesta1
Dado que los datos de muestra no están disponibles, supongo que
Sheet 1
ColumnaO
, Nombres en los que se buscaráO2:O10
.Sheet 2
tieneClasification
&Names
, estánNamed range
enA2:A10
&B2:B10
.- Necesita resultados en el rango
P2:P10
enSheet1
.
Primero, me gustaría sugerir cómo asignar una fórmula de Excel al código VBA.
Range("P2").FormulaArray = "=IFERROR(INDEX(Clasification,MATCH(TRUE,ISNUMBER(SEARCH(Names,O2)),0)),""No Found"")"
NÓTESE BIENNecesita una fórmula de matriz (CSE) para que .FormulaArray
se haya utilizado.
Pero dado que Named Range
es necesario declararlo mientras se usa con VBA Macro, me gustaría recomendarle el siguiente código para usarlo como Standard Module
.
Sub Formula()
Dim Clasification As Range
Dim Names As Range
Set Clasification = Sheets("Sheet2").Range("A2:A10")
Set Names = Sheets("Sheet2").Range("B2:B10")
Range("P2").FormulaArray = "=IFERROR(INDEX(Clasification,MATCH(TRUE,ISNUMBER(SEARCH(Names,O2)),0)),""No Found"")"
Range("P2:P10").FillDown
End Sub
Ajuste las referencias de celda y los rangos con nombre en el código según sea necesario.