有的學員總喜歡對表格填充顏色,對於這種情況,該如何按顏色求和?
早期盧子分享了3種常規的用法,今天再補充自定義函數的用法,這種更靈活。
SUBTOTAL+篩選
在空白單元格輸入公式,9代表求和,為固定值。
選擇任意帶顏色的單元格,右鍵,篩選,按所選單元格的顏色篩選,這樣就搞定了。
這種只能針對篩選狀態才可以。
SUMIF+輔助列
按顏色篩選後,在旁邊的列選擇區域,輸入1,Ctrl+回車。
現在就可以進行條件求和。
用這種方法,即使取消篩選,也不會有影響。
這種只能針對一種顏色。
SUMIF+宏表函數定義名稱
對於這種存在多種顏色的,又該如何求和呢?
選擇D2單元格,點公式→定義名稱,名稱輸入顏色,引用位置輸入下面的公式,確定。63代表獲取單元格的背景顏色。
在D2輸入公式,下拉。這樣有背景色的就大於0。
這樣就可以對多種顏色進行條件求和。
使用宏表函數,必須另存為xlsm格式。
具體問題,具體分析。即使是帶顏色求和,也有多種情況,針對不同情況使用不同方法。
源文件:
https://pan.baidu.com/s/1TZdqSYc0eOQSqoJBvg-xQA
藉助VBA自定義函數
對部門成員填充色為綠色的,計算總共有多少個,並求和。
多行多列用前面的知識點進行操作就比較麻煩,而藉助VBA自定義函數卻能輕而易舉解決。
個數:
求和:
語法都很簡單。
下面就是原始碼:
Function 按顏色求和(求和區域 As Range, 參考單元格 As Range, Optional 顏色類型 As String = "填充") As Double ' 顏色類型:"填充"或"字體",即按照參考單元格的填充色或者字體顏色進行匹配
Application.VolatileSet 求和區域 = Application.Intersect(ActiveSheet.UsedRange, 求和區域) Dim Rg As Range, Total As Double, Bol As BooleanFor Each Rg In 求和區域Select Case 顏色類型Case "填充" Bol = (Rg.Interior.Color = 參考單元格.Interior.Color)Case "字體" Bol = (Rg.Font.Color = 參考單元格.Font.Color)Case Else 按顏色求和 = "第三參數出錯,請檢查確認"Exit FunctionEnd Select
If Bol Then Total = Total + Rg.ValueEnd IfNext 按顏色求和 = TotalEnd Function
Function 按顏色計數(i As Range, j As Range)'新建一個自定義函數,函數名為 Countc(參數 1 是一個區域 i,參數 2 也是一個區域 j)Dim n As Integer '定義一個變量 n,變量 n 為數值Dim k As Range '定義一個變量 k,變量 k 為區域For Each k In i '遍歷區域 i 的所有單元格If k.Interior.Color = j.Interior.Color Then'如果區域 i 的第 k 個單元格顏色與區域 j 相同 n = n + 1 '用於計數的 n 加 1End IfNext按顏色計數 = n '將 n 複製給 Countc,作為這個函數的輸出結果End Function如果還不懂使用自定義函數,先去看文章:一分鐘教你入門Excel自定義函數
VBA的優點就是幾乎無所不能,缺點就是太難學了。普通人只要能學會使用常用的代碼就可以了。
改善版連結:
https://pan.baidu.com/s/1ta4kZPErVSjFuFWlRAkA-A
提取碼:4p5j
來 源:Excel不加班(ID:Excelbujiaban),盧子,《Excel效率手冊 早做完,不加班》系列叢書作者,十年的Excel職場經驗,精通Excel函數和數據透視表。