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.

  • 109 ¿Te parecen útiles los tips de las funciones? (ver tema completo)

    1. 1. ¿Te parecen útiles los tips de las funciones?


      • No
      • Ni me he fijado en ellos

  • Ayúdanos a mejorar la comunidad

    • Donaciones recibidas este mes: 0.00 EUR
      Objetivo: 130.00 EUR
  • Archivos

  • Estadísticas de descargas

    • Archivos
      187
    • Comentarios
      97
    • Revisiones
      28

    Más información sobre "Un juego del Rabino en Excel"
    Última descarga
    Por pegones1

    1    1

  • Crear macros Excel

  • Mensajes

    • Perdona @Abraham Valencia pero he estado liado estos días. En realidad todo el problema se reduce a estos dos problemas: Problema 1: El script que "fabrica" SAP y que luego "pego" en la macro, no es capaz de  guardar archivos en SharePoint. He estado buscando, y en realidad muchas personas tienen ese problema (no poder guardar un Excel en SAP a través de VBA). Eso muy probablemente sean problemas de permisos, que no puedo cambiar (no soy administrador de nada). Como no puedo solucionarlo así, paso al plan B, que es guardar en Excel que me genera SAP en el ordenador de cada usuario que ejecute la plantilla (y que sí está guardada en SharePoint), para después con PowerQuery llamar a ese Excel (el export). Para ello, pretendo guardar el export, en la ruta relativa "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" donde los \..\..\..\ saltan las rutas personales de cada usuario (tipo C:\users\IDusuario\). Eso lo hace bien, y el archivo se guarda en la ruta de cada usuario que lo usa, pero surge el problema 2 Problema 2: PowerQuery no trabaja con rutas relativas del tipo  "C:\..\..\..\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" necesita que sea del tipo fija "C:\users\IDusuario\OneDrive - NombreEmpresa\Documentos\SAP\SAP GUI" pero claro, IDusuario es diferente para cada usuario.   Pero escribiendo todo esto, creo que he dado con una posible solución, no grabar el export en una ruta de usuario, sino en una en la raiz de C:, que siempre será igual para todos los usuarios, del tipo C:\Sap\export.xlsx que seria igual en todos los ordenadores. Asi sí podría decirle a PowerQuery que vaya siempre a la ruta C:\Sap\ que existirá en todos los ordenadores. Mañana intentaré hacer pruebas, aunque mi solución ideal seria que se pudiera guardar en el SharePoint. Saludos.
    • Hola La opción brindada por @torquemada es correcta, funciona, pero hay algunos inconvenientes que (desde mi punto de vista) no la convierten en mi primera elección. Los inconvenientes son: Tendrías que ir columna por columna haciendo los reemplazos, claro que no se harían a mano sino que utilizarías la opción reemplazar o la opción texto en columnas, aun asi demorará un poquito y será trabajoso. Cada vez que descargues otro listado, tendrás que volver a realizar los reemplazos. Me parece una mejor propuesta lo siguiente: Descarga los movimientos a un archivo de Excel Desde tu control de pagos (otro archivo) cargas los movimientos del archivo descargado mediante Power Query Power Query hará los reemplazos y reconocerá todo correctamente (sin que tengas que hacer nada especial) Cuando descargues los movimientos un día posterior, solamente tendrás que hacer clic en "Actualizar" y todo funcionará en automático
    • Hola a todos, Efectivamente, me temo que tal como trabajan las funciones =HOY() y/o =AHORA() (volátiles), sólo con macros puedes obtener soluciones. Un recurso pedestre podría ser, cada vez que quieras que se fije un dato, te sitúes en esa celda y pulses F2, F9 e INTRO.  Pero claro, puede ser un inconveniente si hay que hacerlo repetitivamente en muchas ocasiones,.............. en fin, lo comento sólo como posibilidad. Saludos,
    • Hola nuevamente, mi duda sigue siendo la ruta, o rutas, finales que quedan, esas que llamas "relativas"; igual por si acaso pon 3 o 4 de esas, tal cual son y/o se ven en el explorador de cada PC y, de ser posible, en cualquier otro "lado" en que las veas.
    • Hola, tal cual se plantea, solamente con macros (VBA); en todo caso, hacerlo a mano o con "CTRL + ;". Saludos.
  • Visualizado recientemente

    • No hay usuarios registrado para ver esta página.
×
×
  • 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.