Excel 重度用户最追捧的功能之一,即根据单元格背景颜色对 Excel 中的单元格进行计数或求和。我真的希望我们有一个公式或功能可以为我们做到这一点,但目前还没有。但如果我们转向 VBA 并编写几行代码,我们确实有解决方案。
使用 Excel 筛选器根据颜色对单元格进行计数或求和是的!如果我们将其与适当的公式结合起来,我们可以使用 Excel 过滤器来完成此操作。在这种情况下,您常用的 COUNT 或 SUM 函数将无济于事。这是因为 Excel 过滤器只是 隐藏 不满足条件的结果,而 COUNT 和 SUM 函数都考虑隐藏数据和可见数据,因此,我们需要一个仅处理 可见 数据并忽略隐藏数据的函数。
目录
·使用 Excel 筛选器根据颜色对单元格进行计数或求和
·使用 VBA 根据颜色对单元格进行计数
·了解 VBA 代码
·使用 VBA 根据颜色求和单元格
这就是我们遇到 SUBTOTAL 函数的地方。这种方法对于那些想要避免使用 VBA 的人来说特别有用。
第 1 步:对于这种方法,我们需要数据有标题。如果数据还没有标题,则建议通过添加新行或至少为包含彩色单元格的列为顶部的每列插入标题。
步骤 2:选择包含标题的单元格,然后转到“数据”选项卡 > 在“排序和过滤器”组中单击“过滤器”按钮,您将看到标题单元格中添加了下拉箭头。
步骤 3:移至包含彩色单元格的列的最后一个单元格。您只需在该列中放置一个活动单元格并按 CTRL 向下箭头即可快速完成此操作。向下移动一个单元格并输入以下计数公式:
=小计(2,B2:B10)
我的数据仅在单元格 B2 到 B10 的范围内,这就是公式包含该数据的原因。
步骤4:单击包含颜色的列的下拉箭头按钮。将出现一个菜单,将光标悬停在按颜色过滤选项上,然后选择所需的。这会将数据过滤到仅包含所选颜色的单元格。
如果您想对特定颜色单元格中的值求和,您需要稍微更改公式,如下所示:
=小计(9,B2:B10)
然而,这种方法是相当有限的。因为您一次只能处理一种颜色。如果大型数据集中有不止一种颜色,并且您想要对特定颜色的数据进行计数、求和或平均,那么更好、更快的方法是在 VBA 中创建一个简单的 UDF。
使用 VBA 根据颜色对单元格进行计数为此,我们需要一个 UDF,即用户定义的函数。以下是步骤:
步骤1:按ALT F11快捷键进入Visual Basic环境
第 2 步:进入 Visual Basic 编辑器后,转到“插入”>“模块”以插入新模块。
第三步:双击新建的模块,右侧会打开一个新的空白窗口。复制以下代码并将其粘贴到空窗口中:
Function CountColor(color As Range, data_range As Range)
Dim dRange As Range
Dim dColor As Long
dColor = color.Interior.ColorIndex
For Each dRange In data_range
If dRange.Interior.ColorIndex = dColor Then
CountColor = CountColor 1
End If
Next dRange
End Function
第 4 步:上面的代码现在为您提供了一个名为 CountColor 的新函数。只需提供包含要用作计数标准的颜色的单元格地址,然后提供要处理的数据范围。
下图将引导您完成整个过程:
您也可以一次计算多种颜色:
了解 VBA 代码让我们了解代码的含义以及我们用它实现的目标。
第 1 行:
Function CountColor (color As Range, data_range As Range)
关键字“Function”告诉 Excel 我们要启动名为“CountColor”的 UDF。在括号内我们需要两个参数;“color”和“data_range”都是范围类型, 这 意味着我们必须提及单元格地址或单元格范围。以描述性方式,公式如下:
CountColor(以要用作条件的背景颜色的单元格地址、要检查所选颜色的单元格范围和计数)
请记住,我们定义了两个变量 color 和 data_range。但我们需要知道从哪里获取这两个值以及如何处理它。到目前为止,这还只是一个披露。
第 2 行和第 3 行:
Dim dRange As Range
Dim dColor As Long
定义了两个名为 dRange 和 dColor 的变量。这两个将用于处理作为第 1 行括号内提到的函数参数的一部分给出的信息。我将稍后进一步解释它。
第 4 行:
dColor = color.Interior.ColorIndex
还记得第 2 行和第 3 行中定义的 dColor 变量吗?以及第一行中提到的“颜色”变量?
一旦用户提到第一个参数“颜色”的单元格地址,我们希望 Excel 获取 颜色索引 或只是特定的颜色编号,并将其存储为变量 dColor 的值。存储后,我们可以使用该 颜色索引号 作为标准。
第 5 行到第 8 行:
For Each dRange In data_range
If dRange.Interior.ColorIndex = dColor Then
CountColor = CountColor 1
End If
还记得我们将 dRange 定义为变量并以 data_range 作为参数吗?在第五行中,我们要求 Excel 获取范围内的每个单元格(用户提到第二个参数为 data_range)并将其等同于 dRange。
在第六行中,我们调用 IF 条件语句,检查 任何单元格的颜色索引号是否等于 dColor 变量的颜色索引号 (记住我们在上面的第 4 行中存储了特定的颜色索引号) ,然后添加“1”到计数。
一旦通过 dRange 中的每个元素检查了所有单元格,就终止 IF 语句。
这本质上创建了一个循环并检查范围中提到的每个单元格,一旦检查了所有单元格,循环就会终止。
简而言之,此代码正在获取用户提到的单元格的颜色索引号,然后将其与指定范围内每个单元格的颜色索引号进行比较。匹配的被计入,不匹配的被忽略。这就是我们得到计数的方法。
使用 VBA 根据颜色求和单元格现在我们了解了代码是如何工作的。我们可以 稍微 修改它以获得另一个函数来对满足条件的单元格的值求和。看一下下面的代码,它创建了一个根据单元格颜色对值求和的新 UDF:
Function SumColor(color As Range, data_range As Range)
Dim dRange As Range
Dim dColor As Long
dColor = color.Interior.ColorIndex
For Each dRange In data_range
If dRange.Interior.ColorIndex = dColor Then
SumColor = SumColor dRange.Value
End If
Next dRange
End Function
它与我们为 count 函数编写的代码完全相同,只有区别。我们希望 Excel 获取该单元格的值并将其相加,而不是为每个符合条件的单元格添加“1”。
尽可能简单!
下图显示了基于颜色的单元格值的计数和总和:
Copyright © 2024 妖气游戏网 www.17u1u.com All Rights Reserved