根据颜色和date求和单元格

我有以下几点:

date ——- 成本

Jan £500 Jan £600 Feb £300 Feb £600 March £1000 March £500 

成本单元根据其当前状态(已确认的绿色,未经确认的白色,半确认的黄色)而着色不同,我需要一个公式来计算所有成本,例如绿色和二月份。

我知道这种颜色函数需要VBA,并find了一个有用的称为colorfunction(),允许我使用下面的公式计算颜色的单元格:

 colorfunction(A1, B1:B5, FALSE) 

A1是比较范围的颜色,而FALSE / TRUE是返回总和或计数结果。

但是我不能将这个自定义函数工作到MONTH()公式或SUMIF。 我可能会完全过度复杂化,所以请指出我在试图解决这个问题时所犯的任何愚蠢的错误。

将此函数添加到您的VBA模块以返回单元格内部颜色索引:

  Function ColorIndex(rng As Range, _ Optional text As Boolean = False) As Variant Dim cell As Range, row As Range Dim i As Long, j As Long Dim iWhite As Long, iBlack As Long Dim aryColours As Variant If rng.Areas.Count > 1 Then ColorIndex = CVErr(xlErrValue) Exit Function End If iWhite = WhiteColorindex(rng.Worksheet.Parent) iBlack = BlackColorindex(rng.Worksheet.Parent) If rng.Cells.Count = 1 Then If text Then aryColours = DecodeColorIndex(rng, True, iBlack) Else aryColours = DecodeColorIndex(rng, False, iWhite) End If Else aryColours = rng.Value i = 0 For Each row In rng.Rows i = i + 1 j = 0 For Each cell In row.Cells j = j + 1 If text Then aryColours(i, j) = _ DecodeColorIndex(cell, True, iBlack) Else aryColours(i, j) = _ DecodeColorIndex(cell, False, iWhite) End If Next cell Next row End If ColorIndex = aryColours End Function Private Function WhiteColorindex(oWB As Workbook) Dim iPalette As Long WhiteColorindex = 0 For iPalette = 1 To 56 If oWB.Colors(iPalette) = &HFFFFFF Then WhiteColorindex = iPalette Exit Function End If Next iPalette End Function Private Function BlackColorindex(oWB As Workbook) Dim iPalette As Long BlackColorindex = 0 For iPalette = 1 To 56 If oWB.Colors(iPalette) = &H0 Then BlackColorindex = iPalette Exit Function End If Next iPalette End Function Private Function DecodeColorIndex(rng As Range, _ text As Boolean, _ idx As Long) Dim iColor As Long If text Then iColor = rng.Font.ColorIndex Else iColor = rng.Interior.ColorIndex End If If iColor < 0 Then iColor = idx End If DecodeColorIndex = iColor End Function 

然后获取颜色索引为14(绿色)的所有单元格的计数使用sumproduct作为以下内容:

= SUMPRODUCT( – (ColorIndex(B1:B100000)= 14),B1:B100000)

这将返回范围B1:B100000中的所有单元格的总和,颜色为14(绿色)

最后的例子应该是这样的:

ColorIndex

另外,如果你比Sumproduct更喜欢Sumif,yopu可以select使用助手Column。 在成本input=ColorIndex(B1)旁边的列中,然后向下拖动

在这里输入图像说明

然后在另一个单元格中input公式

=SUM(SUMIFS(B1:B10,C1:C10,14,A1:A10,{"FEB","MARCH"}))

用月份replace你想要总结的月份(你的oringal标题表明这是你的最终目标)。

这将总和成本值,其中帮助者行表示索引是14(绿色)并且月份是2月或3月

在这里输入图像描述

我意识到你正在寻求一个编程的答案,我不知道你的项目的范围。

这是简单的解决scheme,无需编程。

按颜色过滤,select单元格,总和将显示在底部(即2100)

屏幕截图