「売上データを一覧にしたけど、数字がズラっと並んでいるだけで比較しづらい…」。Excelで報告資料を作っていると、こんな悩みにぶつかることがありますよね。
グラフを別シートに作ると手間が増えるし、データバーだと印刷や共有時に書式が崩れることがある。もっと手軽に、セルの中だけで視覚的にデータを比較できたら便利だと思いませんか?
ExcelのREPT関数を使えば、セルの中に棒グラフ風の表示をかんたんに作れます。 この記事ではREPT関数の基本からセル内グラフの作り方、データバーとの使い分けまでまるっと解説していきます。
REPT関数とは|基本の書式と引数
REPT関数は、指定した文字列を決まった回数だけ繰り返して表示する関数です。
読み方は「リピート関数」です。英語の「Repeat(リピート=繰り返す)」がそのまま名前の由来になっています。Excelの基本関数なので、バージョンを問わず使えますよ。
たとえば「■」を5回繰り返せば「■■■■■」が返ってきます。この仕組みを応用すると、数値の大きさに応じた横棒グラフをセル内に描けるわけです。
| 入力 | 出力 |
|---|---|
| 文字列と繰り返し回数 | 文字列を指定回数だけ連結した結果 |
書式:=REPT(文字列, 繰り返し回数)
基本の書き方はとてもシンプルです。
=REPT(文字列, 繰り返し回数)
引数は2つだけです。どちらも必須なので省略はできません。
| 引数 | 必須/省略可 | 内容 |
|---|---|---|
| 文字列(text) | 必須 | 繰り返したい文字列を指定する |
| 繰り返し回数(number_times) | 必須 | 繰り返す回数を正の数値で指定する |
実際に入力してみましょう。次の数式をセルに入れると、「★★★」と表示されます。
=REPT("★", 3)
文字列は「■」「|」「★」など、何でも使えます。セル参照で文字列を渡すこともできますよ。
引数の注意点(繰り返し回数が0・小数のとき)
繰り返し回数の扱いには、いくつか知っておきたいルールがあります。
- 0を指定すると空文字が返ります。エラーにはなりません
- 小数を指定すると切り捨てされます。
REPT("■", 3.7)は3回繰り返しです - 負の数を指定すると
#VALUE!エラーになります - 結果が32,767文字を超えると
#VALUE!エラーになります
実務でエラーになるのは、ほぼ「負の数」か「文字数オーバー」のどちらかです。セル内グラフで使う場合は20文字程度なので、文字数上限を気にする必要はまずありません。小数が切り捨てになる点だけ覚えておけば大丈夫ですよ。
セル内グラフの作り方|ステップで解説
ここからが本題です。REPT関数を使ったセル内グラフの作り方を、3つのステップで解説していきます。
この記事では、次の売上データをサンプルとして使います。
| A | B | |
|---|---|---|
| 1 | 店舗名 | 売上 |
| 2 | 新宿店 | 800,000 |
| 3 | 渋谷店 | 650,000 |
| 4 | 池袋店 | 500,000 |
| 5 | 横浜店 | 400,000 |
| 6 | 大宮店 | 300,000 |
C列にセル内グラフを作っていきましょう。
使うフォントで見た目が変わる(等幅フォント推奨)
まず大切なのがフォント選びです。セル内グラフを表示するセル(C列)には等幅フォントを設定してください。
おすすめは「MSゴシック」か「Courier New」です。等幅フォントなら「■」1文字あたりの幅が一定になるので、棒の長さが正確に数値を反映します。
プロポーショナルフォント(MS Pゴシックなど)を使うと、文字ごとに幅がバラバラになります。すると数値が同じでも棒の長さが微妙にずれてしまうんです。見た目の正確さを保つために、等幅フォントを選んでおきましょう。
MAX関数で相対スケールを正規化する
単純に =REPT("■", B2) と書くと、売上800,000に対して■が80万個並ぶことになります。当然セルに収まりませんよね。
そこで使うのがMAX関数による正規化です。最大値を基準にして、全データを相対的なスケールに変換します。
=REPT("■", INT(B2/MAX($B$2:$B$6)*20))
この数式がやっていることを分解してみましょう。
B2/MAX($B$2:$B$6)で、最大値に対する比率を計算する(0〜1の範囲)*20で、最大20文字になるようにスケーリングするINT()で小数を切り捨てて整数にするREPT("■", ...)で、その回数だけ■を繰り返す
MAX($B$2:$B$6) は絶対参照にしてください。相対参照のままだと、数式をコピーしたときにズレてしまいます。
上のサンプルデータで計算すると、次のような結果になります。
| 店舗名 | 売上 | セル内グラフ | ■の数 |
|---|---|---|---|
| 新宿店 | 800,000 | ■■■■■■■■■■■■■■■■■■■■ | 20 |
| 渋谷店 | 650,000 | ■■■■■■■■■■■■■■■■ | 16 |
| 池袋店 | 500,000 | ■■■■■■■■■■■■ | 12 |
| 横浜店 | 400,000 | ■■■■■■■■■■ | 10 |
| 大宮店 | 300,000 | ■■■■■■■ | 7 |
最大値の新宿店が20個、他は比率に応じた長さになっていますね。これでデータの大小がひと目でわかるようになりました。
IF関数で空白・0値を制御する
実務のデータには空白セルやゼロが含まれることがあります。売上が空欄のまま上の数式を使うと、0/MAX(...) の計算でREPT関数に0が渡されます。結果は空文字になるので見た目は問題ありませんが、「未入力」と「売上ゼロ」の区別がつきません。
IF関数を組み合わせて、空白セルを明示的に制御しましょう。
=IF(B2="", "", REPT("■", INT(B2/MAX($B$2:$B$6)*20)))
この数式なら、B2が空白のときは何も表示しません。売上が0のときは■が0個(空文字)になるので、空白と0を見分けたい場合は次のように書き換えてみてください。
=IF(B2="", "(未入力)", IF(B2=0, "(0件)", REPT("■", INT(B2/MAX($B$2:$B$6)*20))))
エラー防止と可読性の両方を考えると、IF関数との組み合わせは必須テクニックですよ。
REPTセル内グラフ vs データバー|使い分け早見表
Excelにはセル内にバーを表示する「条件付き書式 > データバー」機能もあります。REPT関数と何が違うのか、迷う方も多いのではないでしょうか。
結論から言うと、手軽さならデータバー、柔軟さならREPT関数です。
| 比較項目 | データバー | REPT関数 |
|---|---|---|
| 設定の手軽さ | 数クリックで完了 | 数式を組む必要あり |
| スケール調整 | 自動 | MAX関数で手動設定 |
| 印刷時の再現性 | 環境によって崩れる | 文字として印刷される |
| メール貼り付け | 書式が消えることがある | テキストなので保持される |
| 条件分岐 | 不可 | IF関数で自由に制御可能 |
| CSV出力 | 消える | 文字列として保持される |
| 数値とバーの配置 | 同じセル内 | 別セルに分離可能 |
データバーが向いているケース
データバーは「素早くざっくり可視化したい」ときに最適です。
- 自分用の確認・分析で使う一時的なシート
- フィルターや並べ替えと組み合わせて使うデータ
- スケールの自動調整が欲しい大規模データ
設定はホームタブの「条件付き書式」から「データバー」を選ぶだけ。数式を書く必要がないので、関数に慣れていない方でもすぐに使えますよ。
REPT関数が向いているケース
REPT関数は「他の人に共有する資料」で力を発揮します。
- 印刷して配布する報告書やレポート
- メールに表を貼り付けて送る場面
- CSVやテキスト形式で書き出す必要がある場面
- 特定の条件で棒の色や記号を変えたい場面
データバーは条件付き書式なので、コピー&ペーストやCSV出力で消えてしまいます。一方、REPT関数の結果は純粋な文字列です。どんな形式にエクスポートしても残るのが大きな強みですよ。
実務活用パターン集
REPT関数はセル内グラフ以外にも、さまざまな場面で使えます。ここでは実務でよく使う3つのパターンを紹介しますね。
売上・進捗の横バーグラフ
最もよく使うのが進捗の可視化です。目標に対する達成率をバーで表示すると、進捗状況がひと目でわかります。
=REPT("■", INT(B2/C2*20))
B2が実績、C2が目標です。達成率が100%を超える場合にバーが長くなりすぎないよう、MIN関数で上限を設定するのがコツです。
=REPT("■", MIN(INT(B2/C2*20), 20))
これなら達成率が100%を超えても、バーの長さは最大20文字に収まります。
星評価・5段階スコアの可視化
アンケート結果や商品レビューの星評価にもREPT関数は便利です。
=REPT("★", B2) & REPT("☆", 5-B2)
B2にスコア(1〜5)が入っていれば、「★★★☆☆」のように表示されます。CONCATENATE関数や&演算子で、塗りつぶしの★と空の☆を組み合わせるのがポイントです。
スコアが0〜5の範囲外になるとエラーが出るので、IF関数でガードしておくと安心ですよ。
=IF(AND(B2>=0, B2<=5), REPT("★", B2) & REPT("☆", 5-B2), "エラー")
区切り線・レポートデザイン用途
REPT関数はグラフだけでなく、レポートの見た目を整えるのにも使えます。
=REPT("-", 30)
セクションの区切り線として「——————————」を表示できます。「=」を繰り返せば二重線も作れますよ。LEN関数と組み合わせれば、文字列の長さに応じた可変長の区切り線も作れます。
=REPT("-", LEN(A2))
A2のテキストと同じ長さの線が引けるので、見出しの下線として使うとレポートの見栄えがぐっと良くなります。
よくある質問・トラブルシューティング
REPT関数を使っていて起こりやすいトラブルをまとめました。
Q. #VALUE!エラーが出る
繰り返し回数に負の数が入っていないか確認してください。また、結果が32,767文字を超えている場合もこのエラーになります。MAX正規化を使っていれば文字数上限に引っかかることはまずありません。
Q. セル内グラフの棒の長さがバラバラに見える
フォントが等幅フォントになっているか確認してください。プロポーショナルフォント(MS Pゴシックなど)だと文字幅が不均一になり、棒の長さが正しく反映されません。C列だけでも「MSゴシック」や「Courier New」に変更すれば解決します。
Q. 数式をコピーしたらグラフの比率がおかしくなった
MAX関数の範囲が相対参照になっている可能性があります。MAX($B$2:$B$6) のように$をつけて絶対参照にしてください。数式をコピーしても参照範囲がズレなくなります。
Q. 空白セルにも■が表示されてしまう
IF関数で空白チェックを追加しましょう。=IF(B2="", "", REPT(...)) の形にすれば、空白セルには何も表示されません。詳しくは「IF関数で空白・0値を制御する」のセクションを確認してみてください。
Q. Googleスプレッドシートでも使える?
はい、REPT関数はGoogleスプレッドシートでもまったく同じ書式で使えます。フォント設定の方法がExcelと異なりますが、等幅フォントを選べばセル内グラフも問題なく表示されますよ。
まとめ
この記事では、ExcelのREPT関数を使ったセル内グラフの作り方を解説しました。
ポイントをおさらいしましょう。
- REPT関数は文字列を指定回数繰り返すシンプルな関数
- セル内グラフには等幅フォントとMAX関数による正規化が必須
- 空白・0値の制御にはIF関数を組み合わせる
- 印刷やメール共有にはREPT関数、素早い可視化にはデータバーと使い分ける
- 星評価や区切り線など、グラフ以外の活用パターンも豊富
REPT関数は地味な関数ですが、使いこなすと報告書やダッシュボードの表現力がぐっと上がります。まずはサンプルの売上データで試してみてください。一度作ってしまえば、他のシートにもすぐ展開できますよ。
文字列操作の関数をもっと知りたい方は、文字列関数まとめもあわせてチェックしてみてくださいね。
