Página 1 de 1

suma celdas con colores

Publicado: Lun Feb 20, 2012 10:53 am
por laverda
Hola amigos, soy usuario de OpenOffice desde hace bastante tiempo pero solamente se usar las funciones y formulas fundamentales.

Necesito sumar celdas de un color determinado, pero solamente las celdas no el contenido.
Despues de buscar por el foro no he conseguido encontrar nada que me pueda solucionar el problema.

¿Me podriais ayudar?

Muchas gracias.

Adjunto un archivo para que podais ver lo que necesito.

Las celdas de colores que he de sumar son las de la columna F

Re: suma celdas con colores

Publicado: Lun Feb 20, 2012 3:46 pm
por mriosv
Mira en este hilo, que creo responde a la misma pregunta.
http://user.services.openoffice.org/es/ ... =21&t=6360

Re: suma celdas con colores

Publicado: Lun Feb 20, 2012 6:17 pm
por laverda
Ese hilo ya lo habia visto, pero no es lo que necesito, pues lo que quiero es que sume solo las celdas.

Ademas he abierto el archivo que trae como ejemplo y no consiguo que funcione.

De todas formas muchas gracias por contestar.

Re: suma celdas con colores

Publicado: Lun Feb 20, 2012 7:03 pm
por mauricio
O sea... ¿lo que quieres es "contar" las celdas?

Re: suma celdas con colores

Publicado: Lun Feb 20, 2012 7:38 pm
por laverda
mauricio escribió:O sea... ¿lo que quieres es "contar" las celdas?
Efectivamente quiero contar las celdas que tengan un color determinado.

Re: suma celdas con colores

Publicado: Lun Feb 20, 2012 8:09 pm
por xiseme
Ah! bueno, tratándose de contar podemos hacer una variación ...

Código: Seleccionar todo

Function CONTARCOLOR(CeldaColor As String, RangoSuma As String) As Double
'Variante de la función SUMARCOLOR de FORNELASA pasando los parámetros como texto entre comillas.
'Ej  CONTARCOLOR("B5";"E2:F42")  No olvidar las comillas 
Dim oRango As Object
Dim oCelda As Double
Dim c As Integer
Dim f As Integer
Dim oCuenta as Integer
oCuenta=0	'inicializamos variable
oRango = ThisComponent.CurrentController.ActiveSheet
oCelda = oRango.GetCellRangeByName(CeldaColor).CellBackColor
oRango = oRango.GetCellRangeByName(RangoSuma)
For c = 0 to oRango.Columns.Count - 1
	For f = 0 to oRango.Rows.Count - 1
		If 	oRango.GetCellByPosition(c,f).CellBackColor = oCelda Then
			oCuenta = oCuenta + 1
		End If
	Next
Next
CONTARCOLOR = oCuenta
End Function
Claro que los criterios que se han usado para dar color a las celdas, también podrían emplearse para contarlas [o lo que sea]

Re: suma celdas con colores

Publicado: Lun Feb 20, 2012 8:51 pm
por laverda
xiseme escribió:Ah! bueno, tratándose de contar podemos hacer una variación ...

Código: Seleccionar todo

Function CONTARCOLOR(CeldaColor As String, RangoSuma As String) As Double
'Variante de la función SUMARCOLOR de FORNELASA pasando los parámetros como texto entre comillas.
'Ej  CONTARCOLOR("B5";"E2:F42")  No olvidar las comillas 
Dim oRango As Object
Dim oCelda As Double
Dim c As Integer
Dim f As Integer
Dim oCuenta as Integer
oCuenta=0	'inicializamos variable
oRango = ThisComponent.CurrentController.ActiveSheet
oCelda = oRango.GetCellRangeByName(CeldaColor).CellBackColor
oRango = oRango.GetCellRangeByName(RangoSuma)
For c = 0 to oRango.Columns.Count - 1
	For f = 0 to oRango.Rows.Count - 1
		If 	oRango.GetCellByPosition(c,f).CellBackColor = oCelda Then
			oCuenta = oCuenta + 1
		End If
	Next
Next
CONTARCOLOR = oCuenta
End Function
Claro que los criterios que se han usado para dar color a las celdas, también podrían emplearse para contarlas [o lo que sea]

Supongo que la solucion que me indicas es una macro (mis conocimientos son bastante elementales pero tengo muchos deseos de aprender).

No se como introducir la macro en la hoja, ¿Me podrias indicar como se hace?

Muchas gracias

Re: suma celdas con colores

Publicado: Mar Feb 21, 2012 12:55 am
por xiseme
Herramientas → Macros → Organizar macros → OOo
Aquí dos posibilidades

1.- Función disponible para todo AOO/LibO
Click en la flecha > de "Mis Macros" → Standard y en la parte derecha de la ventana "Nuevo" aparecerá "Module1" ponle el nombre a tu gusto. Aparecerá la ventana de Basic. Pega ahí el código anterior y guarda.

2.- Función estará disponible solo para el archivo NombreDeLaHoja
Click en la flecha > de NombreDeLaHoja → Standard ...igual que en lo anterior.

Esto pondrá a tu disposición la función CONTARCOLOR que tiene dos parámetros. El primero es la una dirección de celda con el color de fondo de referencia, el segundo la dirección del rango que queremos evaluar. Funcionará como cualquier otra función de AOO.

Re: suma celdas con colores

Publicado: Mar Feb 21, 2012 5:10 pm
por laverda
xiseme escribió:Herramientas → Macros → Organizar macros → OOo
Aquí dos posibilidades

1.- Función disponible para todo AOO/LibO
Click en la flecha > de "Mis Macros" → Standard y en la parte derecha de la ventana "Nuevo" aparecerá "Module1" ponle el nombre a tu gusto. Aparecerá la ventana de Basic. Pega ahí el código anterior y guarda.

2.- Función estará disponible solo para el archivo NombreDeLaHoja
Click en la flecha > de NombreDeLaHoja → Standard ...igual que en lo anterior.

Esto pondrá a tu disposición la función CONTARCOLOR que tiene dos parámetros. El primero es la una dirección de celda con el color de fondo de referencia, el segundo la dirección del rango que queremos evaluar. Funcionará como cualquier otra función de AOO.
Muchas gracias por tu respuesta.

He seguido las instrucciones del punto 1 y me sale un mensaje de error que dice:

Se ha producido un error de marco de programacion al ejecutar el comando Standard.Module1.CONTARCOLOR escrito en Basic.

Mensaje: wrong number of parameters!

No he conseguido adjuntar el mensaje pues no he conseguido reducir lo suficiente el archivo creado en formato png.

El punto 2 no soy capaz de aplicarlo.

Siento mucho ser tan torpe.

Re: suma celdas con colores

Publicado: Mar Feb 21, 2012 7:08 pm
por RMG
Hola,

Mi sugerencia. Visita este enlace, te ayudará bastante en el tema de las macros.

http://user.services.openoffice.org/es/ ... 1545#p4404

Saludos

Re: suma celdas con colores

Publicado: Mar Feb 21, 2012 11:02 pm
por xiseme
La función está sin pulir. Entre otras cosas habría que añadirle un control de errores.

Creo que para salir del paso, basta con ignorar los errores y recalcular con Ctrl+Shifft+F9. Ten en cuenta que si la fórmula está 200 veces en tu hoja seguramente habrá que ignorarlos 200 veces.

Esto te permitirá hacer un conteo de las celdas coloreadas por rangos, sin muchas más pretensiones.
No es idóneo; tan poco idóneo como manejar datos "por colores". En todo caso se debieran emplear las condiciones/criterios que se siguen para "colorear" plasmándolas en una o varias fórmulas.

Re: suma celdas con colores

Publicado: Mié Feb 22, 2012 9:12 am
por laverda
RMG escribió:Hola,

Mi sugerencia. Visita este enlace, te ayudará bastante en el tema de las macros.

http://user.services.openoffice.org/es/ ... 1545#p4404

Saludos
Muchas gracias, me dedicare unos dias a estudiar este manual a ver si soy capaz de aprender algo y sobre todo a aplicarlo.

Re: suma celdas con colores

Publicado: Mié Feb 22, 2012 9:16 am
por laverda
xiseme escribió:La función está sin pulir. Entre otras cosas habría que añadirle un control de errores.

Creo que para salir del paso, basta con ignorar los errores y recalcular con Ctrl+Shifft+F9. Ten en cuenta que si la fórmula está 200 veces en tu hoja seguramente habrá que ignorarlos 200 veces.

Esto te permitirá hacer un conteo de las celdas coloreadas por rangos, sin muchas más pretensiones.
No es idóneo; tan poco idóneo como manejar datos "por colores". En todo caso se debieran emplear las condiciones/criterios que se siguen para "colorear" plasmándolas en una o varias fórmulas.
Muchas gracias, tal y como le digo a RMG, voy a dedicar unos dias a estudiar el manual de macros de Mauricio para despues volver a retomar el problema este.

Re: suma celdas con colores

Publicado: Sab Jun 16, 2012 8:36 pm
por SLV-es
Si con las respuestas obtenidas consideras que se ha dado solución a tu consulta (aunque la solución obtenida sea que no la hay :(), por favor, marca el tema como resuelto.
Si no sabes cómo, por favor, lee Como marcar como [RESUELTO] un tema.
Gracias por participar en el foro y ayudar a que todo esté ordenado.

Re: suma celdas con colores

Publicado: Vie Ago 26, 2016 12:39 pm
por nuki
Saludos:

Mil gracias por la información compartida en este post. Lo acabo de utilizar y me funciona!!! :super: :super:

Sólo una cosa, la función no se actualiza automáticamente...

Para actualizarlas me suelo poner encima de la casilla y pulso F9, pero tengo diferentes celdas en diferentes hojas que irán cambiando constantemente y me es inviable ir de una en una actualizando.

Existe alguna forma de que actualice AUTOMATICAMENTE? :oops:


Gracias y un saludo

Re: suma celdas con colores

Publicado: Vie Ago 26, 2016 9:39 pm
por PepeOooSevilla
Hola.

Puedes asignar una de las macros siguientes a la acción "Contenido cambiado" en "Hoja > Sucesos de hoja..." (o pinchando con el botón derecho sobre la pestaña de la hoja):

Código: Seleccionar todo

Sub RecalcularTodo
	ThisComponent.calculateAll
End Sub

Sub RecalcularCeldasModificadas
	ThisComponent.calculate
End Sub
Saludos cordiales.

Re: suma celdas con colores

Publicado: Lun Ago 29, 2016 5:42 pm
por nuki
Gracias PepeOooSevilla:

Funciona!! pero a veces me desactualiza los datos :shock: :shock: :shock:

Tan pronto me pone la suma correcta (p.e. 175), como que cuando me paso a otra hoja del mismo archivo que también tiene el mismo comando y vuelvo, dicho dato ha cambiado :crazy: :crazy: . El F9 lo soluciona, pero me deja mal cuerpo.

He puesto esta:

Código: Seleccionar todo

Sub RecalcularTodo
   ThisComponent.calculateAll
End Sub

porque la otra, no me funcionaba del todo:

Código: Seleccionar todo

Sub RecalcularTodo
   ThisComponent.calculateAll
End Sub
A qué puede ser debido?

Gracias por tu ayuda.

un saludo

Re: suma celdas con colores

Publicado: Mar Ago 30, 2016 11:56 am
por PepeOooSevilla
Hola.
De acuerdo con la API de LibreOffice 5.2 (ver XCalculatable Interface Reference), el método calculate recalcula aquellas celdas cuyas celdas precedentes han cambiado, mientras que calculateAll recalcula todas las celdas, hayan cambiado o no (hablamos de celdas con fórmulas, obviamente).
  • Celdas precedentes y celdas dependientes
    Celda precedente: Aquella celda que participa en el resultado de una fórmula. Un precedente directo es una celda que se utiliza directamente en la fórmula. Un precedente indirecto es una celda que es utilizada por otra celda que se utiliza directamente en la fórmula.
    Celda dependiente: Aquella cuyo resultado depende de otra celda. La celda también puede ser dependiente directo o indirecto.
    Ejemplo: Si C1 = A1 + B1, entonces A1 y B1 son celdas precedentes de C1, y C1 es una celda dependiente de A1 y B1.
pero a veces me desactualiza los datos
Así, sin ver un archivo de ejemplo al que le ocurra eso, no sé a qué puede ser debido.
Saludos cordiales.

Re: suma celdas con colores

Publicado: Lun Sep 05, 2016 8:52 am
por nuki
Gracias por responder Pepe:

Mira, subo este archivo para que veas qué cosa más extraña ocurre. Según cambio cosas en una hoja del archivo en los otros se modifican las sumas :crazy: :crazy: :crazy:

Mil gracias por tu ayuda :super:

Re: suma celdas con colores

Publicado: Mar Sep 06, 2016 12:19 pm
por PepeOooSevilla
Hola.
nuki escribió: Según cambio cosas en una hoja del archivo en los otros se modifican las sumas
Efectivamente, porque la función hace referencia a la "hoja activa" (ThisComponent.CurrentController.ActiveSheet). Si el documento Calc tuviera sólo una hoja no habría ningún problema, pero como tiene varias hojas hay que tener en cuenta que la hoja activa siempre es una, por eso te modificaba todas las sumas de todas las hojas pero sumando sólo los rangos de la misma hoja que no es otra que la hoja activa.

He hecho varios cambios:
  • > Long en lugar de Double
    > Un nuevo parámetro String para especificar la hoja donde tiene que sumar los rangos
    > He añadido la sentencia With que aumenta la velocidad de ejecución
    > He modificado el nombre de las hojas para que no haya confusión con las columnas
Adjunto archivo modificado y he aquí el nuevo código:

Código: Seleccionar todo

Function CONTARCOLOR(CeldaColor As String, RangoSuma As String, NombreHoja As String) As Long
'Variante de la función SUMARCOLOR de FORNELASA pasando los parámetros como texto entre comillas.
'Ej  CONTARCOLOR("B5";"E2:F42";"NOMBRE_HOJA")  No olvidar las comillas 
Dim oHoja As Object
Dim oRango As Object
Dim oCelda As Long
Dim c As Integer
Dim f As Integer
Dim oCuenta as Long

	oCuenta = 0   'inicializamos variable
	oHoja = ThisComponent.getSheets.getByName(NombreHoja)
	With oHoja
		oCelda = .GetCellRangeByName(CeldaColor).CellBackColor
		oRango = .GetCellRangeByName(RangoSuma)
		With oRango
			For c = 0 to .Columns.Count - 1
	   			For f = 0 to .Rows.Count - 1
	      			If .GetCellByPosition(c,f).CellBackColor = oCelda Then
	         			oCuenta = oCuenta + 1
	      			End If
	   			Next
			Next
		End With	'oRango
	End With	'oHoja

	CONTARCOLOR = oCuenta
End Function
Saludos cordiales.

Re: suma celdas con colores

Publicado: Mar Sep 06, 2016 2:20 pm
por nuki
Mil gracias Pepe!!

Lo miro luego tranquilamente y te cuento.

Una cosilla, veo que has cambiado el nombre de las hojas...si cambio los nombres, añado más hojas....no pasa nada, no? La macro sigue funcionando igual de bien, no? :?:

Gracias por tu ayuda!!

Re: suma celdas con colores

Publicado: Mar Sep 06, 2016 5:49 pm
por PepeOooSevilla
Hola.
Puedes añadir hojas, cambiarles el nombre, etc., pero debes tener en cuenta que la llamada a la función es:
  • =CONTARCOLOR("Z36";"U38:AA43";"NOMBRE-DE-LA-HOJA-NUEVA-O-NUEVO-NOMBRE-DE-LA-HOJA")
Siendo los tres parámetros cadenas de caracteres; el primero, una dirección de celda, el segundo, un rango de celdas y el tercero, el nombre de la hoja que contiene a esa función; todos entre comillas dobles.

Ahora bien, si, por ejemplo, pones en B5 (de cada hoja) el nombre de la hoja (sin comillas) entonces la llamada a la función se convierte en (ver adjunto 2016_2017 CALENDARIO_v3.ods):
  • =CONTARCOLOR("Z36";"U38:AA43";$B$5)
El tercer parámetro sigue siendo una cadena de caracteres pero referenciado por medio de una dirección absoluta de celda. Dirección absoluta para que no actualice la dirección relativa de la celda si copias y pegas.
 Editado: El adjunto 2016_2017 CALENDARIO_v4_control_errores.ods contiene un control de errores en la función. En caso de error, por ejemplo, nombre de hoja desconocido, devuelve -1 para que compruebes los parámetros pasados a la función sin que te salte la ventana de error en Basic.
El nuevo código es:

Código: Seleccionar todo

Function CONTARCOLOR(CeldaColor As String, RangoSuma As String, NombreHoja As String) As Long
'Variante de la función SUMARCOLOR de FORNELASA pasando los parámetros como texto entre comillas.
'Ej  CONTARCOLOR("B5";"E2:F42";"NOMBRE_HOJA")  No olvidar las comillas 
Dim oHoja As Object
Dim oRango As Object
Dim oCelda As Long
Dim c As Integer
Dim f As Integer
Dim oCuenta as Long
	
	On Error Goto TRATAR_ERROR
	oCuenta = 0   'inicializamos variable
	oHoja = ThisComponent.getSheets.getByName(NombreHoja)
	With oHoja
		oCelda = .GetCellRangeByName(CeldaColor).CellBackColor
		oRango = .GetCellRangeByName(RangoSuma)
		With oRango
			For c = 0 to .Columns.Count - 1
	   			For f = 0 to .Rows.Count - 1
	      			If .GetCellByPosition(c,f).CellBackColor = oCelda Then
	         			oCuenta = oCuenta + 1
	      			End If
	   			Next
			Next
		End With
	End With

	CONTARCOLOR = oCuenta
	Exit Function

TRATAR_ERROR:
	CONTARCOLOR = -1
End Function
 
Saludos cordiales.

Re: suma celdas con colores

Publicado: Dom Oct 09, 2016 10:40 pm
por juan alberto
Muchas gracias por la información facilitada, para mi trabajo me es extremadamente útil. Seguiré aprendiendo :)

Re: suma celdas con colores(RESUELTO)

Publicado: Dom Mar 27, 2022 8:38 pm
por Lillo1
Buenas tardes
He buscado en el foro y esto es lo único que he encontrado referente a CONTARCOLOR, veo que es del 2016, pero como soy nuevo en esto, es por lo que les pido ayuda.
Creo que he hecho todo lo que leído aquí, pero algo no estoy haciendo bien porque me da un error al ejecutar la macro. Agradecería mucho ayuda. Saludos
Adjunto archivo por si sirve de ayuda. Utilizo OpenOffice 4.1.11 en Windows 11 Home. También el error que me da. "Error en tiempo de ejecución de BASIC. El argumento no es opcional."
Resultados quiniela3.ods
(16.1 KiB) Descargado 174 veces

Re: suma celdas con colores

Publicado: Mar Mar 29, 2022 1:23 pm
por Neftali R
Hombre,

Esa función funciona perfectamente, lo que pasa es que el amarillo en la celda A18 no es el mismo amarillo que está en la tabla, colorea la tabla y la celda A18 otra vez, apreta Control + Mayus + F9 y ya debería estar.

Re: suma celdas con colores

Publicado: Mar Mar 29, 2022 3:18 pm
por Lillo1
Hola
Antes que nada perdonen por mi torpeza, he hecho lo que me ha dicho Neftalí R y no lo he logrado. Les adjunto de nuevo el archivo para ver si me pueden decir donde está el error.
También les adjunto el mismo archivo en Excel donde funciona bien.
Saludos y gracias.
Resultados quiniela3.xlsm
(26.7 KiB) Descargado 194 veces
Resultados quiniela3.ods
(19.69 KiB) Descargado 222 veces

Re: suma celdas con colores

Publicado: Mar Mar 29, 2022 3:38 pm
por Neftali R
Ya vi el problema, no es un formato hecho manualmente, es un formato condicional, ya que ese es el caso, deberías hacer una tabla espejo que haga la misma verificación que el formato condicional (ejemplo: Hoja1.B3=Hoja1.A3 | Hoja1.C3=Hoja1.A3 y así) ese condicional te va a soltar un 1 si la comparación es verdadera y un 0 si la comparación es falsa, así que en lugar de contar por color, estarías contando los 1 en la tabla espejo.

Creo que sería más fácil explicarlo con un ejemplo.
Resultados quiniela3-2 con tabla espejo.ods
(28.17 KiB) Descargado 208 veces
También podríamos hacer que el macro vea el color del formato condicional en lugar del color de la celda, en si misma, que es lo que hace el macro, pero eso sería innecesariamente complicado, siempre es mejor hacer las cosas lo más simples posible.

Re: suma celdas con colores

Publicado: Mar Mar 29, 2022 10:40 pm
por Lillo1
Ahora si.
Muchas gracias Neftalí, funcionando perfectamente.
Una duda, como yo no he creado el tema, soy yo el que tiene que darlo como resuelto o lo dejo así ?
Saludos

Re: suma celdas con colores

Publicado: Mié Mar 30, 2022 12:20 pm
por Neftali R
Un placer ayudar,

En teoría, tú tendrías que haber creado tu propio tema y darlo por resuelto, o un moderador debería haber separado tu mensaje de este hilo e iniciar uno nuevo, pero como no pasó ninguna de esas cosas, te es imposible dar por resuelto el tema ya que el este es de otra persona, sí podrías editar tu mensaje inicial y darlo por resulto si quieres, pero el tema como tal seguirá “abierto” mientras el señor(a) laverda no lo de por resulto (cosa que dudo muchísimo que pase).

Re: suma celdas con colores

Publicado: Jue Jun 30, 2022 8:21 am
por Alavaricosesp
Neftali R escribió: Mar Mar 29, 2022 3:38 pm Ya vi el problema, no es un formato hecho manualmente, es un formato condicional, ya que ese es el caso, deberías hacer una tabla espejo que haga la misma verificación que el formato condicional (ejemplo: Hoja1.B3=Hoja1.A3 | Hoja1.C3=Hoja1.A3 y así) ese condicional te va a soltar un 1 si la comparación es verdadera y un 0 si la comparación es falsa, así que en lugar de contar por color, estarías contando los 1 en la tabla espejo.

Creo que sería más fácil explicarlo con un ejemplo.
Resultados quiniela3-2 con tabla espejo.ods

También podríamos hacer que el macro vea el color del formato condicional en lugar del color de la celda, en si misma, que es lo que hace el macro, pero eso sería innecesariamente complicado, siempre es mejor hacer las cosas lo más simples posible.
Wow que buena esa! :bravo: