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.
No hay comentarios:
Publicar un comentario
Nota: solo los miembros de este blog pueden publicar comentarios.