Excelでセルに数値や日付を入力したら「####」(シャープ記号の連続)が表示されて困った経験はないでしょうか。「####」が表示される原因のほとんどはシンプルなものですが、場面によって原因が異なるため「列幅を広げたのに直らない」というケースも少なくありません。本記事では「####」が表示される全原因を場面別に整理し、一発で解決できる方法から根本的な対処法まで具体的なコード例とあわせて徹底解説します。
Excelの「####」とは何か
「####」はExcelのエラー値のひとつで、セルの内容を表示するために必要な幅が足りない場合や、日付・時刻の計算結果が負の値になってしまった場合に表示されます。Microsoft公式サポートでも、列幅が内容を表示するのに十分でない場合、または日時がマイナスの値になっている数式がある場合に「####」が表示されると明記されています。
他のエラー値(#VALUE!・#REF!・#N/Aなど)と大きく異なる点として、「####」はデータや数式が壊れているわけではありません。計算そのものは正しく行われており、表示するためのスペースが足りていないだけです。そのため、慌てずに原因を特定してスペースを確保するだけで解決できます。
// ####が表示されても数式バーには正しい値が表示されている
// セル上の表示:####
// 数式バーの表示:2025/3/1(日付が正しく保持されている)
// ####が表示される主な原因
// 原因1:列幅が狭くて内容を表示しきれない
// 原因2:日付・時刻の計算結果がマイナス(負の値)になっている
// 原因3:印刷時に列幅が足りなくなる
// 原因4:勤務時間など時刻計算で午前0時をまたぐ計算をしている
「####」が表示される原因と解決方法
原因1:列幅が狭くて内容を表示しきれない(最多)
「####」が表示される最も多い原因が、セルに入力されたデータを表示するための列幅が足りないことです。数値・日付・時刻のいずれでも発生します。
重要なポイントとして、一度も列幅を変更していない列では「####」は発生しません。Excelはデフォルトの列幅では内容に合わせて自動的に幅を広げてくれますが、一度でも列幅を手動で変更すると、その後は幅を自動調整しなくなります。そのため「前まで表示されていたのに急に####になった」という状況は、列幅を変更した後に数値が増えたり日付の表示形式が変わったりしたときに起きます。
// ####が出やすいデータの例(列幅が8文字分しかない場合)
2025年3月1日 → #### (11文字で幅が足りない)
44,927,000 → #### (9文字で幅が足りない)
2025/03/01 12:00 → #### (16文字で幅が足りない)
09:30:00 → #### (表示形式によって幅が変わる)
解決方法1(最速):列番号の境界をダブルクリックして自動調整する
これが最もすばやく解決できる方法です。列番号(A・B・Cなど)の右端の境界線をダブルクリックするだけで、セル内の内容に合わせて列幅が自動的に最適な幅に調整されます。
- 「####」が表示されている列の列番号(例:B)の右端の境界線にマウスカーソルを合わせる
- カーソルが左右の両矢印(↔)に変わったことを確認する
- ダブルクリックする
- 列幅が内容に合わせて自動調整され「####」が解消される
// 複数列をまとめて自動調整する方法
// ① 調整したい列番号をドラッグで複数選択する(例:A列〜E列)
// または Ctrl+A でシート全体を選択する
// ② 選択した列番号の右端境界線のいずれかをダブルクリックする
// → 選択したすべての列幅が一括で自動調整される
// シート全体の列幅を一括で自動調整するショートカット
// ① Ctrl+A でシート全体を選択する
// ② Alt → H → O → I の順にキーを押す(「ホーム」→「書式」→「列幅の自動調整」)
// → すべての列幅が内容に合わせて一括調整される
解決方法2:列幅を任意のサイズに手動で変更する
// 列幅を数値で指定して変更する方法
// ① 列番号を右クリックする
// ② 「列の幅」をクリックする
// ③ 任意の数値を入力してOKをクリックする
// (初期値:8.38 / 標準的な文字数の目安:1文字 ≒ 1ポイント)
// 複数列を同じ幅に揃える方法
// ① 揃えたい列番号を複数選択する(Ctrlを押しながらクリック)
// ② 右クリック →「列の幅」で統一したい幅を入力してOK
// → 選択した列がすべて同じ幅になる
解決方法3:「縮小して全体を表示する」設定を使う(列幅を変えたくない場合)
列幅を変更できないフォーマットが決まったシートや請求書テンプレートなどでは、列幅を変えずにフォントサイズを自動的に縮小してセルに収める「縮小して全体を表示する」設定が便利です。
- 「####」が表示されているセルを選択してCtrl+1を押す
- 「セルの書式設定」ダイアログの「配置」タブを開く
- 「文字の制御」にある「縮小して全体を表示する」にチェックを入れる
- 「OK」をクリックする
// 縮小して全体を表示する設定の注意点
// ・フォントが自動的に小さくなるため、極端に長いデータの場合は読みにくくなる
// ・「折り返して全体を表示する」と併用はできない
// ・ページレイアウト上で幅が決まっている請求書・帳票などに適した方法
解決方法4:日付の表示形式を短くして文字数を減らす
日付が「####」になっている場合は、列幅を広げる代わりに日付の表示形式を短い形式に変更することで「####」を解消することもできます。
// 日付の表示形式を短くする方法
// 方法1:ホームタブから変更する(最も手軽)
// ① 「####」が表示されている日付セルを選択する
// ② 「ホーム」タブの「数値の書式」ドロップダウンをクリックする
// ③「短い日付形式」を選択する
// 表示形式の文字数の比較
yyyy年m月d日 → 例:2025年3月1日(9文字・長い)
yyyy/m/d → 例:2025/3/1(8文字・中程度)
yyyy/mm/dd → 例:2025/03/01(10文字)
m/d → 例:3/1(3文字・短い)
m月d日 → 例:3月1日(5文字)
// 方法2:ユーザー定義で任意の短い形式に変更する
// Ctrl+1 →「表示形式」→「ユーザー定義」→「m/d」などを入力 → OK
原因2:日付・時刻の計算結果がマイナス(負の値)になっている
日付や時刻の計算結果が負の値(マイナス)になると、Excelは「####」を表示します。これは日付のシリアル値がマイナスになることをExcelが許容していないためです。列幅をいくら広げても解決しないため、他の####と区別が必要です。
最もよくあるのが勤務表で退勤時刻から出勤時刻を引く計算において、日をまたぐ夜勤・深夜勤務の場合に計算結果がマイナスになるケースと、過去の日付から未来の日付を引いてしまうケースです。
// 日付計算でマイナスになる例
// A1:2025/3/5(古い日付)、A2:2025/3/1(新しい日付)
=A2 - A1 // → -4(未来の日付から過去の日付を引いてしまっている)
// 表示形式が「日付」のため #### と表示される
// 正しい修正:引く順番を逆にする
=A1 - A2 // → 4(正の値になり正常に表示される)
// 勤務時間計算で午前0時をまたぐ場合のエラー
// C3:出勤時刻(22:00)、D3:退勤時刻(05:00翌朝)、E3:休憩(1:00)
=D3 - C3 - E3 // → 05:00 - 22:00 - 1:00 = -18:00 → #### (マイナスになる)
修正方法1:計算式の引く順番を修正する(日付のマイナス計算の場合)
// 新しい日付 - 古い日付 の順番に修正する
// 誤り
=A2 - A1 // A2が古い日付・A1が新しい日付の場合はマイナスになる
// 正しい
=A1 - A2 // 新しい日付(A1)- 古い日付(A2)= 正の日数が返る
// ABS関数でマイナスの絶対値を取る方法(どちらが大きいか不明な場合)
=ABS(A1 - A2) // → 差の絶対値(常に正の値)が返る
修正方法2:IF関数で日をまたぐ時刻計算を正しく処理する(勤務表の場合)
// 午前0時をまたぐ勤務時間を正しく計算する方法
// 出勤:C3(22:00)、退勤:D3(05:00)、休憩:E3(1:00)
// 方法1:IF関数で日またぎを判定して補正する
=IF(D3 < C3, D3 + 1 - C3 - E3, D3 - C3 - E3)
// D3(退勤)が C3(出勤)より小さい(日またぎ)場合は退勤に「1日」を加算
// → 5:00 + 1 - 22:00 - 1:00 = 6:00(正常に表示される)
// 方法2:MOD関数で日またぎを処理する
=MOD(D3 - C3, 1) - E3
// MOD関数の割り算の余りを利用して常に正の時刻差を取得する
// → 6:00 が正常に表示される
// 方法3:表示形式を「数値」に変更する(マイナスのまま数値として表示したい場合)
// セルを選択 → Ctrl+1 →「表示形式」→「数値」に変更
// → #### ではなく -0.75 のように数値で表示される
原因3:印刷時・印刷プレビュー時に「####」になる
シート上では正常に表示されているのに、印刷プレビューや実際の印刷物では「####」になってしまうことがあります。これは印刷時の用紙サイズや印刷範囲の設定によって実際に印刷される列幅がシート上より狭くなってしまうことが原因です。
// 印刷時に####になる主な原因
// ・「縮小印刷」で用紙に収めようとして列幅が縮小された
// ・印刷範囲が実際の表より広く設定されている
// ・余白の設定が大きすぎて印刷領域が狭い
// ・ページレイアウトビューとシートの表示幅が異なる
修正方法1:「すべての列を1ページに収める」設定を使う
- 「ページレイアウト」タブをクリックする
- 「拡大縮小印刷」グループの「横」のドロップダウンで「1ページ」を選択する
- 印刷プレビューで「####」が解消されているか確認する
// ページレイアウト設定で一括対応する方法
// 「ページレイアウト」→「ページ設定」の右下の矢印アイコンをクリック
// 「ページ」タブの「拡大縮小」で以下を設定する
横:1ページ(すべての列を1ページに収める)
// → 自動的に縮小率が調整されて列幅不足による####が解消される
// 余白を減らして印刷スペースを広げる方法
// 「ページレイアウト」→「余白」→「狭い」を選択
// → 余白が最小限になり印刷可能な横幅が広がる
修正方法2:印刷前に印刷プレビューで必ず確認する
// 印刷プレビューの開き方(ショートカット)
Ctrl + F2 // → 印刷プレビューを直接開く(最速)
Ctrl + P // → 印刷ダイアログと同時にプレビューが表示される
// 印刷プレビューで####が発見されたときの確認ポイント
// ・どの列で####が出ているか確認する
// ・「ページ設定」で余白・用紙サイズ・拡大縮小を確認する
// ・「ページレイアウト」ビューに切り替えて実際の印刷幅で編集する
原因4:数値の小数点以下の桁数が多すぎる
小数点以下の桁数が多く設定されていると、数値の表示に必要な幅が広くなり「####」が表示されることがあります。たとえば「1234.567890123456」のような桁数の多い小数は、列幅が広くないと表示しきれません。
// 小数点の桁数を減らす方法
// 方法1:ホームタブの「小数点以下の桁数を減らす」ボタンを使う
// 「ホーム」タブの「数値」グループにある「.00→.0」のボタンをクリックする
// → クリックするたびに小数点以下の桁数が1つ減る
// 方法2:ROUND関数で四捨五入する
=ROUND(A1, 2) // → 小数点以下2桁に丸める
=ROUND(A1, 0) // → 整数に丸める
=INT(A1) // → 小数部分を切り捨てて整数にする
// 方法3:ユーザー定義の書式で表示桁数を制限する
// Ctrl+1 →「表示形式」→「ユーザー定義」→「#,##0.00」を入力
// → カンマ区切りで小数点以下2桁まで表示(桁数が多くても2桁に丸めて表示)
「####」をシート全体で一括検索して修正する方法
大量のデータが入ったシートで「####」が複数箇所に散在している場合は、まず全体を確認してから一括で対処することが効率的です。
// シート全体の####を一括で解消する手順
// 最もシンプルな一括対処:シート全体の列幅を自動調整する
// ① Ctrl+A でシート全体を選択する
// ② 任意の列番号の右端境界線をダブルクリックする
// または右クリック →「列の幅の自動調整」を選択する
// → すべての列が一括で内容に合わせた幅に調整される
// ####が含まれるセルを検索する方法
// ① Ctrl+F で「検索と置換」を開く
// ② 「検索する文字列」に「####」と入力する
// ③「オプション」→「検索対象」を「値」に変更する
// ④「すべて検索」をクリックする
// → ####が表示されているセルの一覧が表示される
「####」が表示されないようにするための予防策
- 列幅を変更する際は内容に余裕を持たせる:数値や日付が入る列の幅を設定する際は、想定される最大文字数より少し余裕を持たせて幅を設定しましょう。データが増えたときに「####」になりにくくなります。
- 日付の表示形式は最初から短い形式を使う:「yyyy年m月d日」のような長い形式は幅を多く必要とします。特に列幅が限られた帳票では最初から「yyyy/m/d」や「m/d」など短い形式を選ぶ習慣をつけましょう。
- 印刷前に必ず印刷プレビューで確認する:Ctrl+F2 で印刷プレビューを確認する習慣をつけることで、印刷物での「####」を事前に発見して修正できます。
- 時刻の計算には日またぎ対策を組み込む:勤務管理表など時刻計算を含む表は、最初から IF 関数または MOD 関数で日またぎに対応した数式を組み込んでおきましょう。
- ページレイアウトビューで編集する:「表示」タブの「ページレイアウト」を選択して編集すると、印刷時の実際の列幅で作業できるため、印刷後に「####」が発生するリスクを減らすことができます。
// ページレイアウトビューへの切り替え方法
// 「表示」タブ →「ページレイアウト」をクリック
// または 画面右下の「ページレイアウト」アイコンをクリック
// → 印刷時の実際のレイアウトを確認しながら編集できる
「####」と他のExcelエラー値の違い
「####」はエラー値の一種ですが、他のエラー値と仕組みが大きく異なります。他のエラー値は数式や参照の問題ですが、「####」はあくまで「表示スペースの問題」です。
// Excelの主なエラー値の種類と違い
#### → 列幅不足または日時のマイナス値。数式は正しい
#VALUE! → 引数のデータ型が間違っている(文字列に数値を使った等)
#REF! → 参照しているセル・行・列が削除された
#N/A → VLOOKUPなどで検索値が見つからない
#DIV/0! → ゼロで割り算をしている
#NAME? → 関数名のスペルミスや未定義の名前を使っている
#NULL! → 範囲指定に誤りがある
#NUM! → 数値が大きすぎる・小さすぎる、または不正な数値引数
// ####の特徴
// ・IFERROR関数での非表示は不要(数式は正しく計算されている)
// ・列幅を広げるだけで解決できるケースがほとんど
// ・数式バーには正しい値が表示されている
まとめ:「####」の原因と一発解決のポイント
Excelで「####」が表示される原因は大きく4つに分かれます。
- 列幅が狭い(最多):列番号の右端境界線をダブルクリックして列幅を自動調整する。シート全体はCtrl+Aで全選択してから一括調整が最速
- 日付・時刻の計算結果がマイナス:引き算の順番を修正するか、IF関数またはMOD関数で日またぎ計算を正しく処理する
- 印刷時に列幅が足りなくなる:印刷プレビュー(Ctrl+F2)で事前確認し「すべての列を1ページに収める」設定で対応する
- 小数点以下の桁数が多すぎる:「小数点以下の桁数を減らす」ボタンまたはROUND関数で桁数を制限する
「####」はデータや数式が壊れているわけではなく、表示スペースの問題がほとんどです。列番号の右端をダブルクリックするだけで解消できるケースが大半ですので、「####」が出たら慌てずまず列幅の自動調整を試してみましょう。それで解決しない場合は、日付・時刻の計算結果がマイナスになっていないかを数式バーで確認してください。