はじめに:データバー、自分で作ってみませんか?
はじめに、Excelで数値を扱う際、パッと見で大小がわかるようにグラフのような横棒を表示してくれる「データバー」についておさらいしましょう。

実はこの機能、Excel 2007で初めて登場した画期的な機能でした。
さらにExcel 2010では、負の値の表示への対応や、グラデーションだけでなく「単色塗りつぶし」や「枠線」が選べるようになるなど大幅な機能強化が行われ、現在に至るまで実務で大活躍している大人気機能です。
例えば、A3:A8の範囲に {15; 11; 5; 12; 8; 2} という数値があったとします。
この範囲を選択し、ホームタブの「条件付き書式」→「データバー」から好きな色を選ぶだけで、簡単にセルの背景に横棒グラフが表示されます。

確かにこれは便利です。しかし、用意された標準機能を使うだけでは「Excelで暇つぶし」としては少し物足りませんよね。
今回は、このデータバーをすべて「数式」で再現し、さらに標準機能では手の届かない「かゆいところ」までコントロールする、関数を使ったグラフアートの世界へご案内します!
関数を使えば、ここまで自由自在にデータを操れるのかと驚くはずです。
本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!
ステージ1:REPT関数で基本のバーを作る
関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。
まずは基本中の基本です。C3:C8の範囲に、オリジナルのグラフを作ってみましょう。
C3セルに以下の数式を入力します。
=REPT("■", A3:A8)

【解説】REPT(文字列, 繰り返し回数) は、指定した文字を好きな回数だけ繰り返す関数です。
この数式により、A列の数値の数だけ「■」が横に並びます。
次に、見た目を整えましょう。
デフォルトのフォント(游ゴシックなど)だと、■と■の間に隙間が空いてしまい、一本の繋がったバーに見えません。
そこで、C列のフォントを「Consolas」に変更し、列幅や文字サイズを適宜調整します。
※Consolasフォントの優れた等幅性については、以下の過去記事をご参照ください
Excel数式に游ゴシックは使うな!「Consolas」でミスを根絶する最強設定
隙間が詰まって、綺麗なバーになりましたね!文字色を変えれば、好きな色のデータバーになります。

【別解の紹介】
ちなみに、スピルを利用して以下のように書くことも可能です。=CONCAT(IF(SEQUENCE(A3), "■"))
やっていることは同じですが、REPT関数の方がシンプルですね。
しかし、ここで問題が発生します。
もしA列の数値が「1000」だったらどうなるでしょう?「■」が1000個も表示され、セルから遥か彼方へはみ出してしまいます。

これを解決するのが、次のステージです。
ステージ2:表示する「■の最大数」をコントロールする
今度はA3:A8に {25; 9; 40; 19; 66; 32} という、少し大きめの数値があるとします。
最大値が「66」なので、このままでは画面の幅をかなり占領してしまいます。

そこで、「どんなに大きな数値があっても、■の数は最大で『20個』になるように数値を圧縮する」というルールを作りましょう。
B1セルに見出しとして「■の数」と入力し、B2セルに最大値である「20」を入力します。

続いて、A列の数値を「最大20」のスケールに変換するための作業列(B列)を作ります。
B3セルに以下の数式を入力してください。
=ROUND(A3:A8 * B2 / MAX(A3:A8), 0)

【解説】
元の数値を「元の最大値(66)」で割り、そこに「新しい最大値(20)」を掛けています。
これにより、元の「66」は「20」に変換され、他の数値もその比率に合わせてギュッと圧縮(スケーリング)されます。
最後に ROUND 関数で四捨五入して整数にしています。
あとは、C3セルに先ほどと同じ数式を入れるだけです。
=REPT("■", B3#)

B2セルの数値を「10」や「30」に変えれば、グラフの幅が一瞬で切り替わります。
これで、どんな巨大なデータが来ても安心ですね!

ステージ3:差を際立たせる「相対評価」データバー
さらに高度な見せ方に挑戦します。
A3:A8の範囲に {25; 24; 32; 27; 33; 30} という、似たり寄ったりの数値があったとします。
これを普通にデータバーにすると、どれも長いバーになってしまい、「どのくらい差があるのか」が非常に分かりにくくなります。

そこで、「最小値(24)を0個、最大値(33)を20個」として、変化のある部分だけをズームアップして表示してみましょう。
B3セルの数式を、以下のように変更します。
=ROUND((A3:A8 - MIN(A3:A8)) * B2 / MAX(A3:A8 - MIN(A3:A8)), 0)

【解説】
全ての数値から「最小値」を引き算することで、強引に最小値を「0」の基準に引き下げます(マイナスの下駄を履かせて基準をズラすイメージです)。
そして、分母を「最大値」ではなく、「最大値と最小値の差(つまりデータの幅)」にします。
これにより、最小値は「0個」、最大値はB2で指定した「20個」のバーになります。
結果として、B3:B8には {2; 0; 18; 7; 20; 13} という配列が作られ、C列のグラフは僅かな差をダイナミックに可視化するものになります。
つまり、テストの点数をそのままグラフにするのではなく、「偏差値」のように相対的な差を強調してグラフ化するテクニックなのです。
※ちなみに、無料のWeb版Excelに標準搭載されている「条件付き書式」のデータバーには、この「最小値と最大値を自動で相対化して表示する」という高度な設定項目はありません。(ローカルのデスクトップ版Excelであれば、ルールの編集から「最小値」と「最大値」の詳細な設定が可能です)
環境に依存せず、数式を自作できるからこそ可能な、ワンランク上の表現です。
ステージ4:負の数への対応と、恐ろしい「落とし穴」
最後のステージは、マイナスの数値が混ざった場合の表現です。
A3:A8に {25; -19; 42; -13; -50; 21} という配列があるとします。
見栄えを良くするため、C列(C3:C8)を右寄せにして「負の数のバー」を表示し、D列(D3:D8)を左寄せにして「正の数のバー」を表示させましょう。
B2(■の最大数)は「30」にしておきます。

よくある「失敗する数式」
負の数がある場合、全体の幅は「プラスの最大値」から「マイナスの最小値」までになります。
そこで、B3セルに以下のような数式を入れたくなります。
=ROUND(A3:A8 * B2 / (ABS(MAX(A3:A8)) + ABS(MIN(A3:A8))), 0)
そして、C3セル(負)とD3セル(正)で条件分岐してバーを描画します。
- C3セル:
=IF(B3#<0, REPT("■", ABS(B3#)), "") - D3セル:
=IF(B3#>0, REPT("■", B3#), "")
一見、これで完璧に見えますよね。

しかし、ここに恐ろしい落とし穴があります。
試しに、A3:A8の数値をすべて負の数 {-25; -19; -42; -13; -50; -21} に変更してみてください。

最大数を「30」に設定したはずなのに、最も小さい「-50」のバーが24個しか表示されません。
何が悪かったのか?
原因は、先ほどの ABS(MAX(A3:A8)) + ABS(MIN(A3:A8)) という分母の計算にあります。
すべて負の数の場合、MAXは「-13」、MINは「-50」です。
これをABS(絶対値)にして足すと、13 + 50 = 63 になってしまいます。
本当は「0から-50まで」なので、分母(全体の幅)は「50」でなければいけないのに、「63」で割ってしまったため、バーが小さくなってしまったのです。
完璧な数式はこれだ!
これを解決する、無駄を削ぎ落とした正しいB3セルの数式がこちらです。
=ROUND(A3:A8 * B2 / (MAX(A3:A8, 0) - MIN(A3:A8, 0)), 0)
【解説:スケーリングの真髄】
すなわち、全体の幅(分母)を求める際、必ず「ゼロ地点」をまたぐように計算する必要があるのです。
MAX(A3:A8, 0):引数に「0」を含めることで、配列内の数値と「0」を比較してプラスの最大値を探します。
ここが重要ポイントです!もしデータが全部マイナスだったら、配列の最大値(例えば-13)よりも「0」の方が大きくなるため、0が最大値として強制的に採用されます。
これで、0から一番深いマイナス地点までの「正確な距離」を測るための基準ができます。
MIN(A3:A8, 0):同様に配列の数値と「0」を比較して、マイナスの最小値を探します。
もしデータが全部プラスなら、配列の最小値よりも「0」の方が小さくなるため、「0」が採用されます。
この2つを引き算することで、どんなデータが来ても必ず「0を基準とした正確な全体の幅(この場合は0 – (-50) = 50)」が求まるのです。
これで、B3:B8の配列は {-15; -11; -25; -8; -30; -13} となり、最も小さい「-50」のバーが正確に「30個」表示されるようになりました!

最後に:この「数式グラフ」がもたらす本当の価値
たかが「■」を並べるだけの遊びに見えて、実はデータの正規化(スケーリング)という非常に奥深い数学的ロジックが含まれていました。
この数式によるデータバー構築ができると、実務において以下のような強力なメリットがあります。
「用意された機能」に満足せず、あえて「数式」で再現してみる。
そこに、Excelのスキルを飛躍させる大きなヒントが隠されています。
ぜひ、あなたのシートでも自分だけのオリジナル・データバーを作って、データを自由自在に操る楽しさを味わってみてください!





