Saltar al contenido

Función SUMAR.SI para 3 dimensiones


Invitado Cacho R

Recommended Posts

Invitado Cacho R
publicado

Una referencia del tipo

'Hoja 1:Hoja 12'!F15:G30

se denomina Referencia 3D (sugiero dar un "paseo" atento por el enlace que muestro).

___

De acuerdo a lo que nos informa ese artículo técnico sólo algunas funciones del Excel pueden trabajar sobre referencias 3D.

Una de las que no puede hacerlo es -precisamente- la función SUMAR.SI (SumIf en inglés).

Una alternativa sería utilizar una función personalizada como la que muestro en el archivo adjunto: ¡Espero que sea de utilidad!

Saludos, Cacho R.

SumarSi3D.xls

publicado

Muy bueno Cacho,

Algún día me tocará hacer los deberes y actualizarme porque no sé que son los símbolos "$" y "%" en las declaraciones, ¿Punteros? ¿Referencias absolutas?.

Tampoco se que hace "#" al final del nombre de la función, ¿una función que se pasa por referencia?.

"Application.Volatile", Se me viene a la cabeza mi cerebro volatilizándose xD.

Y ya lo ultimo, "Rng1.Parent.Parent.Worksheets(i).Name", he usado nodechilds en los objetos pero nunca parent, ¿Qué ventajas tiene?

Como ya he dicho, algún día me tocará hacer los deberes en VB por que empiezo a estar muy desactualizado jejeje.

Saludos

Invitado Cacho R
publicado
... no sé que son los símbolos "$" y "%" en las declaraciones ...

Créeme, amigo, que hay cosas que son más sencillas de lo que parecen y menos utilizadas de lo que deberían. Por ejemplo:

[TABLE=class: grid, width: 700]

[TR]

[TD]Dim i%

equivale :

Dim i as Integer

ó

Dim Var$

equivale a:

Dim Var as String[/TD]

[TD]Por ello una declaración como:

Dim i%, Var$

equivale a:

Dim i as Integer, Var as String

y así sucesivamente...

Todo lo puedes encontrar -como suele ser habitual- en la ayuda del VBA.[/TD]

[/TR]

[/TABLE]

- Lo de Parent tiene que ver con algo que tú conoces a la perfección: el VBA (Visual Basic for Application) es un lenguaje de programación orientado a objetos, ¿Verdad?...

Y los objetos "no están en el aire": siempre están contenidos en algún lado. Por ejemplo:

- Las celdas (Cells, Range) están contenidas en las hojas de Excel.

- Las hojas de Excel (Worksheets, Sheets) están contenidas en los libros de Excel.

- Los libros de Excel abiertos (Workbooks) están contenidos en la aplicación propiamente dicha (Application).

Así las cosas, Parent nos remite al objeto, control o colección en el que está contenido algo. Entonces si Rng1 es un rango de celdas cualquiera, será:

Rng1.Parent

la hoja en la que el rango Rng1 está contenido

Rng1.Parent.Parent

el libro en el que el rango Rng1 está contenido

y por lo tanto:

Rng1.Parent.Parent.Worksheets(2)

es la segunda hoja del libro en el que el rango Rng1 está contenido

___

Finalmente Application.Volatile se utiliza en las funciones personalizadas (UDF).

¿Para que sirve?... Instruye al VBA que recalcule la UDF cuando otra celda -cualquiera- de la hoja en la que se encuentra la UDF, experimenta -a su vez- algún recálculo.

¿Te sirvió -más o menos- la orientación?

Saludos, Cacho R.

publicado

Vaya que si me sirvió, te explicas muy bien Cacho. Estoy tan acostumbrado a empezar por el objeto de mayor categoría y seguir en subnodos (application.thisworkbook.sheets.range.cell) que se me hace raro ver las llamadas al revés, pero me recuerda a cuando se trabaja con los nodos HTML, ahí es el único caso donde he usado Parent.

Lo de las definiciones Dim está curioso y Volatile es algo que llevaba necesitando mucho tiempo, me encantan las UDF :P-

Muchas gracias por tomarte la molestia de explicármelo Cacho.

Saludos

Invitado Cacho R
publicado
... Muchas gracias por tomarte la molestia de explicármelo Cacho.

Como siempre: ¡Un gusto hacerlo!

publicado

alguien me ayuda!! como hago, si escribo varias cantidades en una celda y que estas me las sume y me coloque la suma en otra por ejemplo introduzco 21 en f1 y luego vuelvo a colocar 40, necesito que en la columna a1 aparezca la suma de esos dos valores!! gracias de antemano por su ayuda!!

publicado

Hola, WIWIW te suguiero inicies un nuevo tema, ya que este apartado es para ideas y aportes no para consultas.

Gracias Cacho R, muy buen aporte y gran explicación, me sirven ambos aportes.

Salu2.xlsx

Invitado Cacho R
publicado

A raiz de una consulta que me hicieron, me ha parecido útil introducir una "vuelta de tuerca" adicional a lo mostrado.

En el archivo que muestro podemos ver la función personalizada del primer mensaje, y -adicionalmente- una estructura de datos que no requiere del uso de esa UDF.

En efecto: si la cantidad de hojas a considerar dentro del rango 3D es variable, la UDF nos entrega todo su potencial como ya vimos.

Pero si la cantidad de hojas que componen el rango 3D es fijo y predeterminado, entonces una mera fórmula matricial nos resuelve el problema del SUMAR.SI.

Saludos, Cacho R.

SumarSi3D_2.xls

Archivado

Este tema está ahora archivado y está cerrado a más respuestas.

×
×
  • Crear nuevo...

Información importante

Echa un vistazo a nuestra política de cookies para ayudarte a tener una mejor experiencia de navegación. Puedes ajustar aquí la configuración. Pulsa el botón Aceptar, si estás de acuerdo.