資料室 > 計算する > 集計する > 色の付いたセルを集計 > ユーザー定義関数を作成する【VBA】
ユーザー定義関数を作成する【VBA】
色の種類が4種類以上である場合には条件付書式の限界を超えるためこれを利用できない。VBAを利用してユーザー定義関数を作成、これを利用する方法が一つの方法として考えられる。
- 計算に使用するブックを開く。
- Altを押しながらF11キーでVBE(Visual Basic Editor)を起動
- [挿入(I)]>[標準モジュール(M)]で標準モジュールを作成
- 作成された標準モジュールをダブルクリック、コードウィンドウへ書きコードを貼り付け。
Function CCSum(Target As Range, ColorNo As Variant, SumRng As Range) As Variant
Rem CellsColorSum
Rem 範囲内の指定色番号のである集計セル範囲を集計する
Dim i As Long
Dim MySum As Double
Application.Volatile
If Target.Count <> SumRng.Count Then
CCSum = "セル数不一致"
Exit Function
End If
If TypeName(ColorNo) = "Range" Then
If ColorNo.Count > 1 Then
MsgBox "引数ColorNoに指定できるセルは一つです"
CCSum = "引数ColorNoセル指定不正"
Exit Function
End If
ColorNo = ColorNo.Interior.ColorIndex
ElseIf Not IsNumeric(ColorNo) Then
CCSum = "引数ColorNo不正"
Exit Function
End If
If ColorNo <> xlColorIndexNone Then
If ColorNo > 56 Or ColorNo < 1 Then
CCSum = "引数ColorNo不正"
Exit Function
End If
End If
For i = 1 To Target.Count
If Target.Cells(i).Interior.ColorIndex = ColorNo Then
MySum = WorksheetFunction.Sum(MySum, SumRng.Cells(i).Value)
End If
Next i
CCSum = MySum
End Function
- Altを押しながらQキーでVBE終了
- A1:A10で背景色赤(標準状態)のセルに対応するB1:B10を集計する場合、セル背景色基準で集計するセルへ次のように入力する
=CCSUM(A1:A10,3,B1:B10)
上記の場合、二つ目の引数「3」が「背景色赤」を表すが、この色番号がわからない場合は調べる色に設定されているセルを直接指定する。
=CCC(A1:A10,A1,B1:B10)
基本的に標準モジュールへ登録したブックでしか有効ではないので、複数のブックで有効とするにはアドイン登録するのが有効である。
なお、上記コードは試作サンプルであり、完全動作は保障しない。
前(条件付書式により色付けの自動化、集計) 目次 次(複数シートの同じ位置のセルを合計)