publicado el 1 de diciembre12 años 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 el 1 de diciembre12 años 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
publicado el 2 de diciembre12 años ... 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 el 2 de diciembre12 años 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 - Muchas gracias por tomarte la molestia de explicármelo Cacho. Saludos
publicado el 2 de diciembre12 años ... Muchas gracias por tomarte la molestia de explicármelo Cacho. Como siempre: ¡Un gusto hacerlo!
publicado el 3 de diciembre12 años 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 el 3 de diciembre12 años 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
publicado el 3 de diciembre12 años 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
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