本記事はセルに色がついていたときの処理方法を解説します。
ポイントは、以下の通りです。
・VBAで関数を作成する – セルの色に基づいて値を取得・操作するカスタム関数を定義
・色付きセルの値を返す処理 – GetCellColorValue関数で白色以外のセルの値を抽出
・色付きセルの値を合計する処理 – SumByColor関数で指定した色のセルの数値を合計
・関数を使った色フィルター方法 – データフィルター機能とSUMIF関数を組み合わせた手法
・隣接セルへの色コピー – CopyCellColorマクロで色付きセルの隣のセルに同じ色を適用
それでは早速見ていきましょう。
エクセルでセルに色がついてたら値を返す・合計する方法【VBA】
マクロを使ったやり方を紹介します。
例としてある和菓子屋さんの商品ごとの1日の売上個数を示します。
ここで桜餅と草餅は期間限定商品であり、ピンクにセルに色がつけられています。
限定商品のみ売上個数を抽出したいと思います。
以下のコードをVBE画面に貼り付けましょう。
Function GetCellColorValue(TargetCell As Range) As Variant
If TargetCell.Interior.Color <> RGB(255, 255, 255) Then
GetCellColorValue = TargetCell.Value
Else
GetCellColorValue = ""
End If
End Function
このマクロの処理の流れは以下の通りです。
1. GetCellColorValueという関数を定義します。
2. セルの内部の色が白色以外のときは、セルに入力されている値を返します。
3. セルの内部の色が白色の時は空白で返します。
C2セルに定義した関数を入力します。
B2セルは塗りつぶしされていないので、C2セルは空白が返されます。
オートフィルでC7セルまで関数をコピーします。
B4,B5セルはピンク色に塗りつぶされているためC4,C5に入力されている数値が返されました。
他のセルは塗りつぶしされていないので空白が返されました。
続けてマクロで色のついているセルの値を合計するやり方を紹介します。
E2セルに限定商品の売上個数の合計を出します。
ピンク色で塗りつぶされたセルの値を合計すればよいです。
以下のコードをVBE画面に貼り付けましょう。
Function SumByColor(TargetRange As Range, ColorCell As Range) As Double
Dim Cell As Range
Dim Total As Double
Dim TargetColor As Long
TargetColor = ColorCell.Interior.Color
For Each Cell In TargetRange
If Cell.Interior.Color = TargetColor Then
If IsNumeric(Cell.Value) Then
Total = Total + Cell.Value
End If
End If
Next Cell
SumByColor = Total
End Function
このマクロの処理の流れは以下の通りです。
1. SumByColorという関数を定義します。
2. 対象となるセルの内部色が指定されたセルの内部色と同じだったらそのセルに入力されている値を足していきます。
3. 条件に合ったセルの入力値の合計値を返します。
E2セルに定義した関数を入力します。
関数を説明します。
対象とするセルの範囲はそれぞれの商品の売上個数なのでB2からB7までとなります。
指定する色のセルはピンク色に塗りつぶされているB4としました。
Enterキーを押すと結果が出ます。
マクロを実行する前に、必ずデータのバックアップを取っておくことをおすすめします。
そうすれば、もしマクロの実行結果が意図したものと違った場合でも、元のデータに戻すことができます。
エクセルでセルに色がついてたら値を返す・合計する方法【関数】
売上個数のデータがあるB1からB7セルを選択して、データ>フィルターをクリックします。
B1セルに▼ボタンが表示されます。
▼ボタンをクリックし、色フィルターを選択します。
ピンクの塗りつぶしを選択します。
ピンクに塗りつぶされたセルの桜餅、草餅の売上個数のデータだけ抽出されます。
抽出されたセルの横(C列)に任意の数字や文字を入力します。
今回は1を入力します。
フィルターを解除します。
色のついたセルの合計を算出する準備ができました。
E2セルに以下の数式を入力します。
Enterで結果が出ます。
数式の説明です。
SUMIF関数はある条件に合っているセルの値を合計する関数です。
範囲:検索対象となるセル範囲
条件:検索する条件 ※文字列の場合は” ”を用いる
合計範囲:合計する範囲
今回は
検索対象:C2からC7
条件:「1」
合計範囲:B2からB7 です。
C2:C7の中で1が入力されているセルに対応するB2:B7のセルの値を合計するという意味になります。
SUMIF関数にセルの塗りつぶし条件を直接入力できない為、このような方法で対応します。
エクセルでセルに色がついてたら隣にも色をつける方法
それぞれの商品に単価のデータが追加されました。
桜餅、草餅の単価もわかりやすくピンク色に塗りつぶしたいです。
セルに色がついていた時に隣のセルにも色をつける方法を紹介します。
以下のコードをVBE画面に貼り付けましょう。
Sub CopyCellColor()
Dim rng As Range
Dim cell As Range
Set rng = Selection
For Each cell In rng
If cell.Interior.Color <> xlNone Then
cell.Offset(0, 1).Interior.Color = cell.Interior.Color
End If
Next cell
End Sub
ブックに戻り、売上個数のデータが入っているセル範囲を選択し、開発>マクロで、
作成したマクロ:CopyCellColorを選択し、実行ボタンを押します。
ピンク色に塗りつぶされている隣のセルも同じ色で塗りつぶせました。
このマクロの処理の流れは以下の通りです。
1. 選択範囲を取得します。
2. 隣のセルに色をコピーする動作を選択範囲内のセルでループします。
エクセルでセルに色がついてたら(if:関数:値を返す:隣に色を付ける:判定:条件:VBAマクロも)の処理方法
この記事では、セルに色がついていた時に値を返したり、合計する方法、隣のセルにも色をつける方法を紹介しました。
ぜひ活用してみてください。
コメント