如何編寫一個巨集來遍歷一系列單元格並按顏色對內容進行計數,而不計算一組合併單元格中的每個單獨單元格。
例如,在圖片中,我想要一個宏返回2 個黃色和3 個綠色的計數,但我編寫的宏返回8 個黃色的計數,因為它將7 個合併的黃色單元格作為個體進行計數.. ....
答案1
啊。此範例中有兩種您應該避免的不良做法:用顏色編碼單元格來傳輸含義,以及合併單元格。不。只是不要。使用不同的欄位來確定狀態或類別值,然後您可以使用條件格式根據該狀態或類別值設定儲存格顏色。您可以使用簡單的工作表公式來執行每個狀態或類別的計數。
細胞合併引起的頭痛比阿斯匹靈還多。只是不要合併單元格。它們會導致選擇問題,正如您所注意到的,也會導致 VBA 中的邏輯問題。不要合併,並使用工作表公式進行簡單的計數。合併單元格的「需要」始終可以透過適當的資料架構和工作表結構來克服。
答案2
我完全同意@泰林的警告,但是如果有一些非常合理的理由需要這樣的解決方案,例如,您可以使用這樣的函數。
Function ColorCount(rng As Range, pat) As Long
Dim cell As Range, cnt As Long
Select Case TypeName(pat)
Case "Range": pat = pat.Interior.Color
Case "String": pat = Range(pat).Interior.Color
End Select
For Each cell In rng
If cell.Address = cell.MergeArea(1).Address And _
cell.Interior.Color = pat Then
cnt = cnt + 1
End If
Next cell
ColorCount = cnt
End Function
此函數有兩個參數:第一個是要檢查的儲存格範圍,第二個是顏色模式(可以是參考、位址文字或數字顏色值)。單元格的顏色來自基本格式,無條件。