VBA練習問題
VBA100本ノック 35本目:条件付き書式

VBAを100本の練習問題で鍛えます
公開日:2020-11-28 最終更新日:2021-02-22

VBA100本ノック 35本目:条件付き書式


条件付き書式を再設定する問題です。
条件付き書式はシート編集で増殖してしまうので、このようなシートにはマクロを用意しておくと便利です。


ツイッター連動企画です。
ツイートでの見やすさを考慮して、ブック・シート指定等を適宜省略しています。

VBAテスト用のサンプルデータは、VBA100本ノックの目次ページ からもダウンロードできます。
マクロVBAを初心者向けの基本から上級者向けの高度な内容までサンプルコードを掲載し解説しています。エクセル関数・機能・基本操作の入門解説からマクロVBAまでエクセル全般を網羅しています。


出題

出題ツイートへのリンク

#VBA100本ノック 35本目
表には条件付き書式が設定されていますが、行編集を繰り返した為に条件付き書式が大量に増えてしまいました。
以下の条件で、条件付き書式を再設定してください。
・対象はE列とG列
・90%未満は赤で塗りつぶす
・100%未満は赤文字
※シートは任意

マクロ VBA 100本ノック


サンプルファイルです。
https://excel-ubara.com/vba100sample/VBA100_35.xlsm
https://excel-ubara.com/vba100sample/VBA100_35.zip


VBA作成タイム

この下に頂いた回答へのリンクと解説を掲載しています。
途中まででも良いので、できるだけ自分でVBAを書いてみましょう。


他の人の回答および解説を見て、書いたVBAを見直してみましょう。


頂いた回答

解説

条件付き書式のVBAを何も見ずにスラスラ書ける人はなかなかいないでしょう。
調べてVBAを書くわけですが、まずはマクロの記録でしょう。
それには手動操作が出来る必要があります。
今回の設定では2通りの方法があるので、どのように設定するかといった所から人によってVBAが変わってきます。

Sub VBA100_35_01()
  Dim ws As Worksheet
  Set ws = ActiveSheet
  
  With ws.Range("E:E,G:G").FormatConditions
    .Delete
    With .Add(Type:=xlExpression, Formula1:="=AND(E1<>"""",E1<0.9)")
      .Interior.Color = vbRed
    End With
    With .Add(Type:=xlExpression, Formula1:="=AND(E1<>"""",E1<1)")
      .Font.Color = vbRed
    End With
  End With
End Sub


この問題なら列全体で良いと思いますが、範囲を限定したほうが良い場合もあると思います。
数値範囲の指定は「セルの値に基づいて…」「数式を指定して…」どちらでも良いと思います。
これらについては記事補足に掲載しました。


補足

数値範囲の指定には2通りあります。

マクロ VBA 100本ノック

マクロ VBA 100本ノック


Sub VBA100_35_02()
  Dim ws As Worksheet
  Set ws = ActiveSheet
  Dim targetCol As String
  targetCol = "E:E,G:G"
  
  Dim rng As Range
  Set rng = ws.Range("B2").CurrentRegion
  Set rng = Intersect(rng, rng.Offset(1))
  Set rng = Intersect(rng, ws.Range(targetCol))
  
  ws.Range(targetCol).FormatConditions.Delete
  With rng.FormatConditions
    Call .Add(xlCellValue, xlEqual, 0)
    With .Add(xlCellValue, xlLess, 0.9)
      .Interior.Color = vbRed
    End With
    With .Add(xlCellValue, xlLess, 1)
      .Font.Color = vbRed
    End With
  End With
End Sub

FormatConditions.AddをWithに指定しています。
書式の追加があった時に簡単に追加できるのではという事で、このように書いてみました。

マクロの記録のVBAを見ると、
.StopIfTrue = True
この指定がありますが、これは「条件を満たす場合は停止」の指定になります。
2007で互換性のために追加されたものですが、Trueが既定なので特に指定しなくても構いません。


サイト内関連ページ

第91回.条件付き書式(FormatCondition)
・FormatConditionsコレクション ・FormatConditionオブジェクト ・条件付き書式のマクロVBA実践例 ・マクロVBAの条件付き書式について
第102回.Intersectメソッド
・Intersectメソッド ・Intersectの使用例 ・Intersectメソッドの最後に
第103回.UnionメソッドとAreasプロパティ
・Unionメソッド ・Areasプロパティ ・Unionメソッドで連結した結果のRangeオブジェクトの状態について ・Unionメソッドの使用例 ・Unionメソッドの実践例




同じテーマ「VBA100本ノック」の記事

32本目:Excel終了とテキストファイル出力
33本目:マクロ記録の改修
34本目:配列の左右回転
35本目:条件付き書式
36本目:列の並べ替え
37本目:グラフの色設定
38本目:1シートを複数シートに振り分け
39本目:数値リストの統合(マージ)
40本目:複数ブックの統合
41本目:暗算練習アプリ
42本目:データベース形式に変換


新着記事NEW ・・・新着記事一覧を見る

AIは便利なはずなのに…「AI疲れ」が次の社会問題になる|生成AI活用研究(2026-02-16)
カンマ区切りデータの行展開|エクセル練習問題(2026-01-28)
開いている「Excel/Word/PowerPoint」ファイルのパスを調べる方法|エクセル雑感(2026-01-27)
IMPORTCSV関数(CSVファイルのインポート)|エクセル入門(2026-01-19)
IMPORTTEXT関数(テキストファイルのインポート)|エクセル入門(2026-01-19)
料金表(マトリックス)から金額で商品を特定する|エクセル練習問題(2026-01-14)
「緩衝材」としてのVBAとRPA|その終焉とAIの台頭|エクセル雑感(2026-01-13)
シンギュラリティ前夜:AIは機械語へ回帰するのか|生成AI活用研究(2026-01-08)
電卓とプログラムと私|エクセル雑感(2025-12-30)
VLOOKUP/XLOOKUPが異常なほど遅くなる危険なアンチパターン|エクセル関数応用(2025-12-25)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.日本の祝日一覧|Excelリファレンス
3.変数宣言のDimとデータ型|VBA入門
4.FILTER関数(範囲をフィルター処理)|エクセル入門
5.RangeとCellsの使い方|VBA入門
6.繰り返し処理(For Next)|VBA入門
7.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
8.マクロとは?VBAとは?VBAでできること|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.メッセージボックス(MsgBox関数)|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。
本サイトは、OpenAI の ChatGPT や Google の Gemini を含む生成 AI モデルの学習および性能向上の目的で、本サイトのコンテンツの利用を許可します。
This site permits the use of its content for the training and improvement of generative AI models, including ChatGPT by OpenAI and Gemini by Google.



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ