今天和大家分享2个按照颜色求和的方法,一个非常简单,用到宏语句;一个稍微复杂点。
①、正常方法:
以下为对应的源数据:
STEP 1
定义名称,为提取颜色值做准备
我们先插入两列颜色值列辅助列
公式 - 定义名称 ,在定义名称窗口中输入名称 mycolor(可以自定义),然后在下面引用来源中输入公式:
=GET.CELL(63,Sheet2!B2)&T(NOW())
公式说明:
- Get.cell(63,单元格) 可以获取单元格填充颜色值
- &T(NOW()) 实现表格在更新时定义名称取值也可以更新
STEP 2
获取颜色值
在C列和E列分别输入公式 =mycolor,即可获取B列和D列的单元格填充色。
STEP 3
剩下的就用sumif函数
=SUMIF(C:C,E2,B:B)
公式注释:(条件列,匹配单元格,求和列)
要点总结:
1、核心是用到Get.cell(63,单元格),这个比较少用到的函数,稍微解释一下用法:
GET.CELL函数的语法为:GET.CELL(Type_num, Reference)
GET.CELL函数有两个参数:
第一个参数Type_num:用数字表示的单元格信息的类型,范围是1-66。
第二个参数Reference:单元格区域。
综上:63获取单元格填充背景色。
2、定义名称的使用
3、&T(NOW())配合使用,实时更新表格信息
4、巧妙使用sumif函数,辅助颜色列提取颜色值,进行求和。
②、宏语句,非常简答,对比下就知道了。
代码如下:
Function Dlookup(arr, A, R1, R2)
Dim arr1
Dim m
arr1 = arr
For x = 1 To UBound(arr1)
If Application.CountIf(Sheets(arr1(x)).Columns(R1), A) > 0 Then
Dlookup = Sheets(arr1(x)).Cells(Application.Match(A, Sheets(arr1(x)).Columns(R1), 0), R2)
End If
Next x
End Function
Function CSum(Rg1 As Range, Rg2 As Range)
Dim rg_ID As Range, rg_sum As Long
For Each rg_ID In Rg1
If rg_ID.Interior.ColorIndex = Rg2.Interior.ColorIndex Then
rg_sum = rg_sum + IIf(IsNumeric(rg_ID.Value), rg_ID.Value, 0)
End If
Next
CSum = rg_sum
End Function
STEP1:按下ALT+F11——启动宏——右键——新建模块——复制代码到窗口内
STEP2:输入公式:
=CSum(B$2:B$10,E3)
公式解析:求和区域,颜色单元格
注意事项:如果数据未更新,双击函数单元格,然后全部下拉数据。
STEP3:最后记得将文件另存为xlsm格式。
生成的文件会带感叹号,切记!!
【小陈说】
1、对比一下,带宏的方法非常简单,小伙伴可以直接拿去使用;
2、切记保存为带宏的EXCEL;
3、如遇到数据未更新,切记重新双击下拉函数。