Un lecto dejaba un comentario en el blog preguntando sobre el uso de las fórmulas matriciales desde nuestras macros en Excel.
Para dar respuesta al lector emplearemos la propiedad .FormulaArray asociado a un objeto Range.
Para evitar errores en la aplicación de esta propiedad deberemos recordar algunas limitaciones de las funciones matriciales (dentro de VBA y en la hoja de cálculo):
1-No funcionan sobre Celdas Combinadas.
2-No podemos sobrepasar, al construir nuestra matricial, los 255 caracteres!!!.
3-En nuestras macros se admiten los dos estilos de referencia: A1 y R1C1 !!! (a pesar de lo que indica la ayuda de Excel).
4-No se puede modificar/eliminar la parte de una matricial aplicada sobre un mismo rango.
5-No todas las funciones de Excel admiten su forma matricial.
6-No debemos escribir las llaves {} que delimitan nuestra fórmula matricial... aparecen al validar las fórmulas presionando Ctrl+Mayusc+Enter, o bien desde las macros al mostrarlas con la propiedad .FormulaArray.
Trabajaremos sobre nuestro rango de celdas de la siguiente imagen:
Abrimos la ventana de código de nuestro módulo estándar y añadimos los siguientes códigos:
Ejecutando las tres macros vemos cómo se muestran los resultados en los rangos indicados...
Tal como se quería mostrar a modo de ejemplo.
Para dar respuesta al lector emplearemos la propiedad .FormulaArray asociado a un objeto Range.
Para evitar errores en la aplicación de esta propiedad deberemos recordar algunas limitaciones de las funciones matriciales (dentro de VBA y en la hoja de cálculo):
1-No funcionan sobre Celdas Combinadas.
2-No podemos sobrepasar, al construir nuestra matricial, los 255 caracteres!!!.
3-En nuestras macros se admiten los dos estilos de referencia: A1 y R1C1 !!! (a pesar de lo que indica la ayuda de Excel).
4-No se puede modificar/eliminar la parte de una matricial aplicada sobre un mismo rango.
5-No todas las funciones de Excel admiten su forma matricial.
6-No debemos escribir las llaves {} que delimitan nuestra fórmula matricial... aparecen al validar las fórmulas presionando Ctrl+Mayusc+Enter, o bien desde las macros al mostrarlas con la propiedad .FormulaArray.
Trabajaremos sobre nuestro rango de celdas de la siguiente imagen:
Abrimos la ventana de código de nuestro módulo estándar y añadimos los siguientes códigos:
Sub Matriciales1()
'matricial en una celda
Range("H3").FormulaArray = "=SUM(IF(B2:B13=G3,C2:C13,0))"
End Sub
''''''''''''''''''''''''''''''''''''
Sub Matriciales2()
'misma matricial sobre un rango
Range("D2:D13").FormulaArray = "=IF(B2:B13=""Excel"",C2:C13,0)"
End Sub
''''''''''''''''''''''''''''''''''''
Sub Matriciales3()
'matricial sobre rango corrido
With Range("H6:H9")
'paso 1
.Formula = "=MAX(IF($B$2:$B$13=G6,$C$2:$C$13,0))"
'paso 2
.FormulaArray = .FormulaR1C1
End With
End Sub
Ejecutando las tres macros vemos cómo se muestran los resultados en los rangos indicados...
Tal como se quería mostrar a modo de ejemplo.
This post first appeared on EXCEL FORO: EJERCICIOS, EJEMPLOS, SOLUCIONES, DUDA, please read the originial post: here