Suma basada en el formato en celdas adyacentes (Microsoft Excel)
Srinivas tiene datos en las columnas A y B. Necesita sumar los valores en la columna B para los cuales el formato de celda de las celdas correspondientes en la columna A es amarillo. Por ejemplo, si el formato de la celda A17 es amarillo, el valor de la celda B17 debe incluirse en la suma.
Hay numerosas macros disponibles en Internet (incluso en ExcelTips) que le permiten realizar una suma condicional basada en el color u otro formato de una celda. Esta necesidad es diferente, sin embargo, ya que no es el color de la celda en cuestión, sino el color de la celda de una columna a la izquierda. Esto todavía se puede hacer usando una macro, como se muestra aquí:
Function SumNextYellow(ByVal r As Range) Dim c As Range Dim a As Double For Each c In r If c.Offset(0, -1).Interior.ColorIndex = 6 Then 'Yellow a = a + c.Value End If Next c SumNextYellow = a End Function
La función se puede usar en una fórmula de hoja de trabajo y acepta una referencia de rango como argumento. A continuación, recorre cada celda del rango y, si la celda de la izquierda es amarilla, el valor se incluye en la suma. (Debe tener en cuenta que el ColorIndex utilizado en la macro debe probarse con su versión de Excel para asegurarse de que sea aplicable; puede ser diferente en diferentes versiones).
Un ejemplo mucho más sólido se muestra en la siguiente lista. Esta función acepta uno o más rangos de celdas, junto con un argumento que representa una muestra del formato que desea utilizar.
Function ColorConditionSum(cSample As Excel.Range, rng As Excel.Range) ' This Function returns sum of values in rng.Columns(2) if ' corresponding cell in rng.Columns(1) is colored with sample ' color (cSample cell) ' Arguments: cSample = cell colored by sample color ' rng = cell range to be processed (2 columns) Dim rngCol2 As Excel.Range Dim rngConstants As Excel.Range Dim rngFormulas As Excel.Range Dim lColorIndex As Long Dim MySum As Double Dim area As Excel.Range Dim c As Excel.Range ColorConditionSum = False If Not TypeOf cSample Is Excel.Range Then Exit Function '>>> lColorIndex = cSample.Interior.ColorIndex MySum = 0 Set rngCol2 = Nothing If TypeOf rng Is Excel.Range Then If rng.Columns.Count < 2 Then Exit Function '>>> On Error Resume Next For Each area In rng.Areas If rngCol2 Is Nothing Then Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeConstants, 1) If rngCol2 Is Nothing Then Set rngCol2 = area.Columns(2).SpecialCells(xlCellTypeFormulas, 1) Else Set rngCol2 = Application.Union( _ rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1)) End If Else Set rngCol2 = Application.Union( _ rngCol2, area.Columns(2).SpecialCells(xlCellTypeConstants, 1)) Set rngCol2 = Application.Union( _ rngCol2, area.Columns(2).SpecialCells(xlCellTypeFormulas, 1)) End If Next area For Each area In rngCol2.Areas For Each c In area.Cells With c.Offset(0, -1) If .Interior.ColorIndex = lColorIndex Then MySum = MySum + c.Value End If End With Next c Next area End If ColorConditionSum = MySum End Function
Utiliza esta función de la siguiente manera en una hoja de trabajo:
=ColorConditionSum(A10, A12:B22)
En este caso, es una celda que tiene el color interior que desea hacer coincidir y A12: B22 es el rango de celdas a evaluar. Los valores se extraen de la segunda columna del rango y el formato se verifica en las celdas de la primera columna.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (3298) se aplica a Microsoft Excel 97, 2000, 2002 y 2003. Puede encontrar una versión de este consejo para la interfaz de cinta de Excel (Excel 2007 y posterior) aquí:
link: / excelribbon-Summing_Based_on_Formatting_in_Adherent_Cells [Suma basada en el formato en celdas adyacentes]
.