Como automatizar la funcion coincidir con macros en vba

Tengo datos en dos hojas, en la hoja 6 tengo una matriz de a7 hasta la ultima fila con datos de la la columna h. Hay celdas vacias en la columna A. Y en la hoja6 tengo un reporte en las columnas a y b.

Lo que busco es hacer dinamica esta formula en la columna C11 con macros:

=SI.ND(INDICE(EF!$A$6:$H$63; COINCIDIR(A11;EF!$F$6:$F$63;0);8);"")

Que en lugar de 63 tome la ultima fila con datos de la columna H

Que en lugar de 63 tome la ultima fila con datos de la columna F, si la formula da error o no lo encuentra que coloque 0 en las filas de la columna C y que no imprima la formula en la celda, solo el resultado.

2 Respuestas

Respuesta
1

Te invito a mirar el video Nº 15 de mi canal: Fórmulas con VBA.

- Con Application. WorksheetFunction

- Con FormulaR1C1

- Con Fórmula

Y tal como comento allí: para obtener una fórmula dinámica, recuerda colocar entre comillas los argumentos 'fijos' y entre & los variables.

Para el ejemplo, tu fórmula quedaría de este modo:

Sub formulaDinamica()
'x Elsamatilde
'guardar la última fila ocupada en col H de la hoja EF
finx = Sheets("EF").Range("H" & Rows.Count).End(xlUp).Row
'fórmula en C11
With Range("C11")
    .formula = "=IFNA(INDEX(EF!$A$6:$H$" & finx & ",MATCH(A11,EF!$F$6:$F$" & finx & ",0),8),0)"
    '.Value = .Value    'inhabilitada provisoriamente
End With
End Sub

Si la ves correcta, ahora habilita la línea del .Value  para pasarla a valores.

Gracias, si la fórmula me devuelve 0 como le digo que me limpie o vacíe la celda ya sea con la instrucción empty, o = " "

Si la fórmula da error, ahora está mostrando un 0 por el último argumento de la función SI. ERROR o IFNA. Reemplázalo, al final, por espacio o doble comillas:

"=IFNA(INDEX(EF!$A$6:$H$" & finx & ",MATCH(A11,EF!$F$6:$F$" & finx & ",0),8),"")"

Sdos!

Respuesta
1

Visita:

Cursos de Excel y Macros

Por Dante Amor

------ ---------------------------------------------------------------- ---

Prueba esta macro:

Sub ponervalores()
  With Range("C11:C" & Range("A" & Rows.Count).End(3).Row)
    .Formula = "=IFNA(INDEX(EF!$A$6:$H$63,MATCH(A11,EF!$F$6:$F$63,0),8),0)"
    .Value = .Value
  End With
End Sub

RECOMENDACIONES:

https://youtu.be/4klJVh_Ob0M 

https://youtu.be/ch7sb2Mh_Ow 

Sal u dos Dante Amor

Utiliza esta opción con el método Find para encontrar la última fila de un rango o de varias columnas:

Sub ponervalores()
  Dim uf As Long
  uf = Sheets("EF").Range("F:H").Find("*", , xlValues, xlPart, xlByRows, xlPrevious).Row
  With Range("C11:C" & Range("A" & Rows.Count).End(3).Row)
    .Formula = "=IFNA(INDEX(EF!$A$6:$H$" & uf & ",MATCH(A11,EF!$F$6:$F$" & uf & ",0),8),0)"
    .Value = .Value
  End With
End Sub

RECOMENDACIONES:

Curso de macros. Metodo find ejemplos. - YouTube

Sal u dos Dante Amor

Hay celdas que me dan 0 en la columna C; Con la segunda macros, como le digo que me limpie los ceros. 

Eso pediste:

"si la formula da error o no lo encuentra que coloque 0"

Si no quieres el 0, modifica la fórmula en la macro.

Cambia el 0 por ""

Si no encuentra el código o da error que limpie la celda

¿Cómo qué limpie la celda?

En la celda donde no hay código me coloca 0, lo que busco es que deje vacías las celdas que contengan ceros, ejemplo: supo vamos que en las celdas c10, c12 y c15 tienen 0, quiero que deje vacías esas celdas o en blanco, sin ningún valor

Y con el cambio que te sugerí, ¿qué t3 deja?

Te sugerí que cambiaras el 0 por ""

...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas