こんにちは、フリーランスエンジニア兼ライターのワキザカ サンシロウです。
皆さんは、VBAで条件付き書式を使う方法を知っていますか?
条件付き書式を使うとセルの色を強調し、データを見やすく整理することができるのでおすすめです。
ただ、条件付き書式は機能がとても多いので、VBAで書こうとすると一気に難しいと感じる方も多いと思います。
そこで今回は、
・条件付き書式とは
といった基礎的なことから、
・VBAで条件付き書式を使うために最低限覚えておくこと
・マクロの記録を使ってコードを素早く確認する方法
といった応用的な方法まで、徹底的に解説します!
条件付き書式とは
最初に、条件付き書式について具体例を含め簡単に説明します。
条件付き書式を使えば、以下のようにセルに色を付けてデータを見やすく整理することができます。
条件付き書式 例1:
条件付き書式 例2:
例1では、日付が土日の場合は文字を赤、勤怠表で×になっているセルはグレーアウトするような条件付き書式を設定しています。
例2ではステータスが完了の場合は行全体をグレーアウト、遅延している場合は行全体を赤くすることで、タスク管理がしやすいよう条件付き書式を設定しています。
このように、データの変化によって自動で色を変えることができるのが条件付き書式です。
VBAで条件付き書式を使う方法とは
次に、条件付き書式をVBAで書く方法について解説します。
VBAで条件付き書式を設定する場合は、以下のように書きます。
セル範囲.FormatConditions.Add(Type, [Operator], [Formula1],[Formula2],[String],[TextOperator],[DateOperator],[ScopeType])
各引数の意味:
No | 引数 | 意味 |
---|---|---|
1 | Type | ルールの種類 |
2 | Operator | 条件 |
3 | Formula1 | 条件に指定した値1 |
4 | Formula2 | 条件に指定した値2 |
5 | String | TypeでxlTextStringを指定したときのみ使用 対象となる文字列を指定 |
6 | TextOperator | TypeでxlTextStringを指定したときのみ使用 引数Stringの判定方法を指定 |
7 | DateOperator | TypeでxlTimePeriodを指定したときのみ使用 期間を指定 |
8 | ScopeType | 条件付き書式がピボットテーブルに対して適用する場合のみ指定 |
複数パラメータを設定する場合は「引数名:=設定値」をカンマで区切って以下のように設定します。
セル範囲.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="×")
また、引数によっていくつか選択肢があるので、表形式で紹介します。
Type:
No | 意味 | 設定値 |
---|---|---|
1 | 平均以上 | xlAboveAverageCondition |
2 | 空白 | xlBlanksCondition |
3 | セル値 | xlCellValue |
4 | カラースケール | xlColorScale |
5 | データバー | xlDatabar |
6 | エラー条件 | xlErrorsCondition |
7 | 演算 | xlExpression |
8 | アイコンセット | xlIconSets |
9 | 空白条件なし | xlNoBlanksCondition |
10 | エラー条件なし | xlNoErrorsCondition |
11 | 文字列 | xlTextString |
12 | 期間 | xlTimePeriod |
13 | 上位10位 | xlTop10 |
14 | 一意値 | xlUniqueValues |
Operator:
No | 意味 | 設定値 |
---|---|---|
1 | 範囲内 | xlBetween |
2 | 等しい | xlEqual |
3 | 次の値より大きい | xlGreater |
4 | 以上 | xlGreaterEqual |
5 | 次の値より小さい | xlLess |
6 | 以下 | xlLessEqual |
7 | 範囲外 | xlNotBetween |
8 | 等しくない | xlNotEqual |
TextOperator:
No | 意味 | 設定値 |
---|---|---|
1 | ではじまる | xlBeginsWith |
2 | を含む | xlContains |
3 | を含まない | xlDoesNotContain |
4 | で終わる | xlEndsWith |
DetaOperator:
No | 意味 | 設定値 |
---|---|---|
1 | 過去7日間 | xlLast7Days |
2 | 先月 | xlLastMonth |
3 | 先週 | xlLastWeek |
4 | 来月 | xlNextMonth |
5 | 来週 | xlNextWeek |
6 | 今月 | xlThisMonth |
7 | 今週 | xlThisWeek |
8 | 今日 | xlToday |
9 | 明日 | xlTomorrow |
10 | 昨日 | xlYesterday |
条件式追加後、書式の設定をFormatConditionオブジェクトのプロパティで追加していくことで、文字を太字にしたり、背景色を変えることができます。
マクロの記録を使って素早く書き方を確認する方法とは
先ほどのプロパティをみて、覚えるのが無理だ・・・と思った方も多いのではないでしょうか。
1つずつ覚えていけば覚えられるかもしれませんが、全てをいきなり覚えるのは難しいですよね。
そんな時はマクロの記録で一旦操作を確認するのがおすすめです!
マクロの記録で操作保存
↓
保存したコードを見る
↓
この記事の引数の意味を見つつコードを修正
の流れで書くことで、出来上がったコードと動きを見つつ修正ができるのでおすすめです!
マクロの記録の使い方については以下記事で詳しく解説しているため、使ったことがない方は見てみてくださいね!
サンプルコード
最後に、サンプルコードを用意したので紹介します。
VBA実行前のシート:
サンプルコード
Sub Test() Dim rngCellArea As Range Dim frmSetting As FormatCondition '条件付き書式の範囲 Set rngCellArea = Range("A1:F5") '条件付き書式の追加 Set frmSetting = rngCellArea.FormatConditions.Add(Type:=xlCellValue, Operator:=xlEqual, Formula1:="×") '太字・背景色をグレーに変更 frmSetting.Font.Bold = True frmSetting.Interior.Color = RGB(204, 204, 204) End Sub
VBA実行後のシート:
とても簡単な例ですが、指定した範囲のセルの中に「×」があるセルを太字・グレーアウトに変更しています。
「FormatConditions.Add」で条件付き書式を設定し、「Font.Bold」で太字、「Interior.Color」で背景色グレーを設定しています。
まとめ
今回は、VBAで条件付き書式を使う方法について解説しました。
条件付き書式は機能が多いですが、一度にすべて覚える必要はありません!
最後に紹介したマクロの記録を使いつつ、わからない部分のみググったりこの記事をみればOKです。
データの見やすさは作業効率にも影響するので、ぜひ使ってみてくださいね!