昨天,我回答了一个网友提问,想要对表格中填充颜色的单元格进行求和运算,他说没找到方便的办法,于是,本着无休止的探索精神,我查遍了函数公式和VBA语言,最终搞出了一个利用VBA一键自动运算的方法,今天我将详细步骤发一下:
从上图我们可以看到,这里的需求是对付款金额内的颜色填充单元格进行求和然后除以合同金额,最终实现付款进度的显示,这里无论增删行,都只需要点击按钮,就能一键运算,当然也可以下拉。
操作步骤
仅需五步
【粘贴代码】打开VBA编辑器,右键插入模块,复制代码并粘贴。
【绘制按钮】插入一个图形,设置格式,在图形上点击右键指定宏。
【加辅助列】在进度列前面插入一个辅助列,设置列宽,将颜色填充为需要统计的单元格相同的颜色。
【设置格式】给单元格设置格式为显示百分比,条件格式添加添加规则,样式为数据条显示,类型为数字,最小值0最大值1。
上述操作可以不插入按钮,直接使用VBA定义的函数公式:=getmarryyou(A1:B10,C1) 这里的“getmarryyou”为VBA中定义的函数公式名称,可以在VBA第一段代码中自行修改为任意,公式中“A1:B10”为需要按颜色求和的单元格范围(按需选择),“C1”为颜色条件的单元格(例如我对红色填充单元格求和,则需将C1填充为红色,或者将C1改为已经填充为红色的单元格),总之,举一反三!
代码如下▼
Public Function GETMARRYYOU(X As Range, Y As Range)
For n = 1 To X.Count
If X(n).Interior.ColorIndex = Y.Interior.ColorIndex Then GETMARRYYOU = GETMARRYYOU + X(n).Value
Next
End Function
Sub 填入与刷新()
For i = 2 To [G65536].End(3).Row
'i=2意思为第2行起,G65536为G列,上一行为从G列第二行开始判断
If Cells(i, 7) <> "" Then Cells(i, 9) = "=IFERROR((GETMARRYYOU(RC[1]:RC[6],RC[-1])/RC[-2]),"""")"
'i,7意思为第7列(即G列),i,9意思为第9列(即I列),上一行意思为如果G列单元格不为空,则在I列填入公式
Next
End Sub
需要注意的是,这是根据网友需求进行设计的,如果表格数据所在行与列发生变化,则需要对代码进行相应修改,代码我添加了注释。