【ExcelVBA・マクロ】アイコンセット・データバーを自動設定する方法|FormatConditionsで数値を視覚化【コピペOK】

ExcelVBA

数値の大小をひと目で伝えたいとき、セルに色をつけるだけの条件付き書式では物足りないと感じることがあります。データバーやアイコンセットを使えば、棒の長さや信号の色で数値の大きさを直感的に表現でき、ダッシュボードのような見やすい表を作ることができます。

この記事では、FormatConditions オブジェクトを使って、データバーとアイコンセットをVBAで自動設定する方法を解説します。設定を手作業で行うと範囲や色をセルごとに揃えるのが面倒ですが、マクロ化しておけばボタン1つで統一感のある書式に仕上げられます。

スポンサーリンク
スポンサーリンク

データバーとアイコンセットの違い

  • データバー:セルの値の大きさに応じて、セル内に棒グラフのような色付きバーを表示する
  • アイコンセット:セルの値をいくつかのグループ(信号の色や矢印など)に分類し、対応するアイコンを表示する

どちらも「条件付き書式(Conditional Formatting)」の一種で、VBAでは Range.FormatConditions に対して AddDatabar または AddIconSetCondition を呼び出すことで設定できます。

データバーをVBAで設定する

以下のコードは、B2:B20の範囲に青系のデータバーを設定する例です。

Sub AddDataBarFormat()

    Dim ws As Worksheet
    Dim targetRange As Range
    Dim cf As Databar

    Set ws = ActiveSheet
    Set targetRange = ws.Range("B2:B20")

    '既存の条件付き書式をクリアしてから設定し直す(再実行対応)
    targetRange.FormatConditions.Delete

    Set cf = targetRange.FormatConditions.AddDatabar

    With cf
        .BarColor.Color = RGB(99, 142, 198)
        .ShowValue = True
    End With

End Sub

ShowValueFalse にすると、バーだけが表示されて数値そのものは非表示になります。数値とバーを両方見せたい表か、バーだけでシンプルに見せたい表かによって使い分けるとよいでしょう。

アイコンセットをVBAで設定する

続いて、C2:C20の範囲に信号機(3色)のアイコンセットを設定する例です。達成率や進捗率のように、状態を3段階で表したい数値に向いています。

Sub AddIconSetFormat()

    Dim ws As Worksheet
    Dim targetRange As Range
    Dim cf As IconSetCondition

    Set ws = ActiveSheet
    Set targetRange = ws.Range("C2:C20")

    targetRange.FormatConditions.Delete

    Set cf = targetRange.FormatConditions.AddIconSetCondition

    With cf
        .IconSet = ActiveWorkbook.IconSets(xl3TrafficLights1)
        .ShowIconOnly = False
    End With

End Sub

IconSets に指定できる種類は信号機以外にも、矢印(xl3Arrows)や旗(xl3Flags)、星(xl3Stars)などが用意されています。表現したい内容に合わせて選んでみてください。ShowIconOnlyTrue にすると、数値を隠してアイコンだけを表示できます。

アイコンの表示しきい値を独自に設定する

初期状態では、3段階のアイコンは「上位33%」「中位33%」「下位33%」のようにパーセンタイルで自動的に区切られます。達成率のように「80%以上は緑」といった明確な基準がある場合は、しきい値を直接指定します。

Sub SetIconSetThresholds()

    Dim ws As Worksheet
    Dim cf As IconSetCondition

    Set ws = ActiveSheet
    Set cf = ws.Range("C2:C20").FormatConditions(1)

    'IconCriteria(1)は最下位アイコンのため設定不要
    With cf.IconCriteria(2)
        .Type = xlConditionValueNumber
        .Value = 50
        .Operator = xlGreaterEqual
    End With

    With cf.IconCriteria(3)
        .Type = xlConditionValueNumber
        .Value = 80
        .Operator = xlGreaterEqual
    End With

End Sub

このコードでは、値が80以上で緑、50以上80未満で黄色、50未満で赤のアイコンが表示されるようになります。TypexlConditionValuePercent に変更すれば、割合ベースでのしきい値指定も可能です。

実行時に注意したいポイント

  • FormatConditions.Delete は対象範囲に設定されているすべての条件付き書式を削除します。他の条件付き書式と共存させたい場合は、範囲を分けるか、削除処理を外すようにしてください。
  • FormatConditions(1) のようにインデックスで指定する場合、対象範囲に複数の条件付き書式が設定されていると意図しないものを取得してしまう可能性があります。直前に作成した条件を確実に扱いたいときは、AddDatabarAddIconSetCondition の戻り値をそのまま変数に受け取って使うのが安全です。
  • データバーやアイコンセットは見た目のインパクトが強いため、多用しすぎると逆に見づらくなります。強調したい列だけに絞って設定するのがおすすめです。

まとめ

この記事では、FormatConditions.AddDatabarFormatConditions.AddIconSetCondition を使って、データバーとアイコンセットをVBAで自動設定する方法を紹介しました。しきい値をIconCriteriaで独自に指定すれば、パーセンタイルに頼らない明確な基準での色分けも可能です。

進捗管理表や達成率レポートなど、数値の大小を視覚的に伝えたい表にぜひ活用してみてください。

スポンサーリンク
スポンサーリンク
ExcelVBA
シェアする
いがぴをフォローする

コメント

タイトルとURLをコピーしました