条件付き書式は使わない!REPT関数で「自作データバー」を作る極意

条件付き書式は使わない!REPT関数で「自作データバー」を作る極意 実務の深淵

はじめに:データバー、自分で作ってみませんか?

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

Excelの説明画像

実はこの機能、Excel 2007で初めて登場した画期的な機能でした。

さらにExcel 2010では、負の値の表示への対応や、グラデーションだけでなく「単色塗りつぶし」や「枠線」が選べるようになるなど大幅な機能強化が行われ、現在に至るまで実務で大活躍している大人気機能です。

例えば、A3:A8の範囲に {15; 11; 5; 12; 8; 2} という数値があったとします。

この範囲を選択し、ホームタブの「条件付き書式」→「データバー」から好きな色を選ぶだけで、簡単にセルの背景に横棒グラフが表示されます。

Excelの説明画像

確かにこれは便利です。しかし、用意された標準機能を使うだけでは「Excelで暇つぶし」としては少し物足りませんよね。

今回は、このデータバーをすべて「数式」で再現し、さらに標準機能では手の届かない「かゆいところ」までコントロールする、関数を使ったグラフアートの世界へご案内します!

関数を使えば、ここまで自由自在にデータを操れるのかと驚くはずです。

本記事では、無料のWeb版Excelを使用して検証および画像の作成を行っています。Windowsはもちろん、MacやLinuxの方もブラウザさえあれば挑戦できます!


ステージ1:REPT関数で基本のバーを作る

関数の詳細な仕様については、Microsoft公式のヘルプも参考にしてください。

まずは基本中の基本です。C3:C8の範囲に、オリジナルのグラフを作ってみましょう。

C3セルに以下の数式を入力します。

=REPT("■", A3:A8)

Excelの説明画像

【解説】
REPT(文字列, 繰り返し回数) は、指定した文字を好きな回数だけ繰り返す関数です。

この数式により、A列の数値の数だけ「■」が横に並びます。

次に、見た目を整えましょう。

デフォルトのフォント(游ゴシックなど)だと、■と■の間に隙間が空いてしまい、一本の繋がったバーに見えません。

そこで、C列のフォントを「Consolas」に変更し、列幅や文字サイズを適宜調整します。

※Consolasフォントの優れた等幅性については、以下の過去記事をご参照ください
Excel数式に游ゴシックは使うな!「Consolas」でミスを根絶する最強設定

隙間が詰まって、綺麗なバーになりましたね!文字色を変えれば、好きな色のデータバーになります。

Excelの説明画像

【別解の紹介】
ちなみに、スピルを利用して以下のように書くことも可能です。
=CONCAT(IF(SEQUENCE(A3), "■"))
やっていることは同じですが、REPT関数の方がシンプルですね。

しかし、ここで問題が発生します。

もしA列の数値が「1000」だったらどうなるでしょう?「■」が1000個も表示され、セルから遥か彼方へはみ出してしまいます。

Excelの説明画像

これを解決するのが、次のステージです。


ステージ2:表示する「■の最大数」をコントロールする

今度はA3:A8に {25; 9; 40; 19; 66; 32} という、少し大きめの数値があるとします。

最大値が「66」なので、このままでは画面の幅をかなり占領してしまいます。

Excelの説明画像

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

B1セルに見出しとして「■の数」と入力し、B2セルに最大値である「20」を入力します。

Excelの説明画像

続いて、A列の数値を「最大20」のスケールに変換するための作業列(B列)を作ります。

B3セルに以下の数式を入力してください。

=ROUND(A3:A8 * B2 / MAX(A3:A8), 0)

Excelの説明画像

【解説】
元の数値を「元の最大値(66)」で割り、そこに「新しい最大値(20)」を掛けています。

これにより、元の「66」は「20」に変換され、他の数値もその比率に合わせてギュッと圧縮(スケーリング)されます。

最後に ROUND 関数で四捨五入して整数にしています。

あとは、C3セルに先ほどと同じ数式を入れるだけです。

=REPT("■", B3#)

Excelの説明画像

B2セルの数値を「10」や「30」に変えれば、グラフの幅が一瞬で切り替わります。

これで、どんな巨大なデータが来ても安心ですね!

Excelの説明画像

ステージ3:差を際立たせる「相対評価」データバー

さらに高度な見せ方に挑戦します。

A3:A8の範囲に {25; 24; 32; 27; 33; 30} という、似たり寄ったりの数値があったとします。

これを普通にデータバーにすると、どれも長いバーになってしまい、「どのくらい差があるのか」が非常に分かりにくくなります。

Excelの説明画像

そこで、「最小値(24)を0個、最大値(33)を20個」として、変化のある部分だけをズームアップして表示してみましょう。

B3セルの数式を、以下のように変更します。

=ROUND((A3:A8 - MIN(A3:A8)) * B2 / MAX(A3:A8 - MIN(A3:A8)), 0)

Excelの説明画像

【解説】
全ての数値から「最小値」を引き算することで、強引に最小値を「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」にしておきます。

Excelの説明画像

よくある「失敗する数式」

負の数がある場合、全体の幅は「プラスの最大値」から「マイナスの最小値」までになります。

そこで、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#), "")

一見、これで完璧に見えますよね。

Excelの説明画像

しかし、ここに恐ろしい落とし穴があります。

試しに、A3:A8の数値をすべて負の数 {-25; -19; -42; -13; -50; -21} に変更してみてください。

Excelの説明画像

最大数を「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の説明画像

最後に:この「数式グラフ」がもたらす本当の価値

たかが「■」を並べるだけの遊びに見えて、実はデータの正規化(スケーリング)という非常に奥深い数学的ロジックが含まれていました。

この数式によるデータバー構築ができると、実務において以下のような強力なメリットがあります。

  1. 条件付き書式が使えない環境での可視化 Web版の制約や、他システムへCSVエクスポートする際など、機能に依存せず「テキスト情報」としてグラフを維持できます。
  2. ダッシュボードの軽量化 大量のグラフオブジェクトや条件付き書式を多用するとExcelファイルが重くなりますが、テキストベースのREPT関数なら動作が極めて軽量です。
  3. データ分析の基礎体力がつく ステージ3や4で学んだ「最大・最小の幅でデータを圧縮し、基準をズラす」という考え方は、機械学習や高度なデータ分析における「正規化(Normalization)」の基礎そのものです。

「用意された機能」に満足せず、あえて「数式」で再現してみる。

そこに、Excelのスキルを飛躍させる大きなヒントが隠されています。

ぜひ、あなたのシートでも自分だけのオリジナル・データバーを作って、データを自由自在に操る楽しさを味わってみてください!

条件付き書式は使わない!REPT関数で「自作データバー」を作る極意
はじめに:データバー、自分で作ってみませんか?はじめに、Excelで数値を扱う際、パッと見で大小がわかるようにグラフのような横棒を表示してくれる「データバー」についておさらいしましょう。実はこの機能、Excel 2007で初めて登場した画期…
条件付き書式の魔術!Excelのセルで「7セグメント時計」を完全再現
はじめに:Excelで「遊び」を本気でやろう当ブログ「Excelで暇つぶし」へようこそ!今回は実務の効率化……ではなく、純粋にExcelの奥深さを楽しむための「最高の暇つぶし」をご提案します。テーマは、「デジタル時計の再現」です。電光掲示板…
ドロップダウンリストは遅い!Excelで爆速入力を実現する2つの代替案
はじめに:ドロップダウンリストって、本当に便利ですか?Excelでデータを入力してもらう際、「ドロップダウンリスト(データの入力規則)」を設定するのは定番ですよね。特に「大分類」を選んだら、それに対応した「中分類」が出てきて、さらに「小分類…
【難問】Excelで0と1の2次元配列から「連続する塊」を数える数式
はじめに:この海に、島はいくつある?(2次元編)以前の記事で、1列のデータから「連続する塊」を数える方法を紹介しました。「なんだ、今回はその応用編か」と思いましたか?Excelで「連続するデータの塊」を数える!0と1の島を探す6つの数式いい…
Excelで重複なし・誤認なしの安全なクーポンコードを大量生成する数式
はじめに:そのクーポンコード、本当に大丈夫?ECサイトやキャンペーンで配布する「クーポンコード」。ランダムな英数字であれば何でもいいと思っていませんか?例えば、適当に作ったコードが「820MKD」だったとします。これをお客様がiPhoneで…
タイトルとURLをコピーしました