目的別
#VALUE!エラーの直し方
#VALUE! は 「渡された値の種類が、その計算に使えない」という状態です。
足し算に文字列を渡した、日付が必要なところに文字を渡した、といった食い違いで出ます。
探すのは1つのセルです。範囲のどこか1つに、数値ではないものが混ざっています。
このページの中身(24項目)
まず、犯人のセルを特定する
範囲が広いと目視では見つかりません。次の式で、数値でないセルの数を数えます。
=SUMPRODUCT(--(ISNUMBER(範囲)=FALSE))
0でなければ、範囲の中に数値でないものがあります。
場所まで知りたいなら、隣の列に =ISNUMBER(A2) を並べて、
FALSE になっている行を探すのが確実です。
ISNUMBER は見た目ではなく、実際の種類を返します。
目で見て分かる手がかり
数値は既定で右寄せ、文字列は左寄せになります。 数字なのに左に寄っているセルは、文字列として入っています。 表示形式を「標準」に戻しても右に寄らなければ、中身が文字列です。
1. 数字が文字列として入っている
Webからの貼り付け、CSVの読み込み、他システムからの出力で頻繁に起きます。
1,000 のようにカンマ付きで貼られた、
1 000 のように区切りが空白になっている、などが典型です。
直し方
1つずつなら VALUE で変換します。
=VALUE(SUBSTITUTE(A2,",","")) のように、
先に余分な記号を SUBSTITUTE で外してから渡します。
列ごと直すなら、Excelは「区切り位置」を開いて何も変えずに完了する方法が速いです。 スプレッドシートは、空のセルに1をコピーして、対象列に「形式を指定して貼り付け → 乗算」でも揃います。
2. 見えない文字が混ざっている
改行、タブ、ノーブレークスペース( の実体)は、
画面では空白に見えますが、数値には変換できません。
確認のしかた
=LEN(A2) が見た目の桁数より多ければ、余分な文字があります。
=CODE(RIGHT(A2,1)) で末尾1文字のコードを見ると、
32(半角空格)や160(ノーブレークスペース)が出ることがあります。
直し方
改行やタブは CLEAN、両端の空白は TRIM で外します。
コード160はTRIMでは取れないので、
=SUBSTITUTE(A2,CHAR(160),"") で明示的に消します。
3. 日付が日付として扱われていない
2026/8/1 と書いてあっても、文字列なら日付の計算はできません。
日数の引き算、DATEDIF、EOMONTH は
すべて #VALUE! になります。
確認のしかた
そのセルに =ISNUMBER(A2) を当てます。日付は内部では数値なので、
TRUEなら日付、FALSEなら文字列です。
直し方
DATEVALUE で変換します。
2026年8月1日 のような和文表記は、そのままでは変換できないことがあります。
その場合は =DATE(LEFT(A2,4),MID(A2,6,1),MID(A2,8,1)) のように
数字を切り出して DATE で組み立てます。
4. 関数に渡す引数の型が違う
関数が求めている型と、渡した値が合っていない場合です。
引数を1つずつ別のセルに取り出して、どこで #VALUE! になるかを見ると特定できます。 数式全体をにらむより早く終わります。
5. 配列の大きさが合っていない(Excel)
Excelでは、行数の違う2つの範囲をそのまま掛け合わせると #VALUE! になります。
=SUMPRODUCT(A2:A100,B2:B50) のような形です。
両方の行数を揃えてください。
Googleスプレッドシートでは、この場合 #N/A や
#REF! が返ることがあり、エラーの種類が一致しません。
共有相手の環境が違うときは、この点も確認してください。
空白と0を取り違えない
空欄は計算では0として扱われるので、それ自体は #VALUE! の原因になりません。 原因になるのは「空欄に見えるが、空白文字が入っている」セルです。
=ISBLANK(A2) が FALSE なのに何も見えないなら、
空白文字か、="" を返す数式の結果が入っています。
ISBLANK は、数式が返した空文字を「空欄ではない」と判定します。
直したあとの確認
1か所直すと連鎖して直ることが多いので、
=SUMPRODUCT(--ISERROR(範囲)) で残りの件数を見てください。
0になっていれば終わりです。0でなければ、まだ別の種類が混ざっています。
症状から原因を引く
| 見えている症状 | 疑うところ |
|---|---|
| 数字が左に寄っている | 文字列として入っている(原因1) |
| LENの結果が見た目より多い | 見えない文字(原因2) |
| 日付の引き算だけ失敗する | 日付が文字列(原因3) |
| SUMは通るのに、引き算だけ失敗する | SUMは文字列を無視するため(後述) |
| 一部の行だけ失敗する | その行のセルだけ型が違う(原因1・2) |
| 2つの範囲を掛けたときだけ失敗する | 行数が違う(原因5) |
4行目が見落としやすいところです。SUM は範囲の中の文字列を
黙って無視します。=A2-B2 のような直接の計算だけが失敗します。
「合計は出るのに差が出ない」なら、範囲の中に文字列があります。
関数別:#VALUE! が出る場面
| 関数 | 出る場面 | 直し方 |
|---|---|---|
| DATEDIF | 日付が文字列 | DATEVALUE で変換 |
| EOMONTH | 基準日が日付として認識されていない | 同上、または DATE で組み立て |
| LEFT / MID | 文字数の引数が数値でない | 引数を VALUE で数値に |
| SUMPRODUCT | 範囲の行数が違う | 行数を揃える |
| INDEX | 行番号に文字列を渡している | MATCHの結果を確かめる |
| TEXT | 1つ目が数値でも日付でもない | 先に型を揃える |
実際に来そうな相談と、その読み解き
「合計は出るのに、引き算だけ #VALUE! になる」
SUMは文字列を無視して合計します。=A2-B2 は無視しません。
どちらか一方が文字列です。
=ISNUMBER(A2) と =ISNUMBER(B2) を並べれば、
どちらが犯人かすぐ分かります。
「CSVを取り込んだ列だけ計算できない」
CSVの数値は、桁区切りのカンマや通貨記号が付いたまま文字列で入ることがあります。
また、末尾に改行が残っていることもあります。
=VALUE(SUBSTITUTE(SUBSTITUTE(A2,",",""),"¥","")) のように、
記号を外してから変換します。列全体なら、Excelの「区切り位置」を通すのが速いです。
「勤怠表の時間だけ足せない」
8:30 のような表記が文字列で入っている場合です。
時刻も内部では数値(1日を1とする小数)なので、
文字列のままでは足せません。=TIMEVALUE(A2) で変換するか、
=VALUE(A2) で通ることもあります。
24時間を超える合計を出すなら、表示形式を [h]:mm にしてください。
これをしないと、24時間ごとに0に戻って見えます。
直す前のチェックリスト
=SUMPRODUCT(--(ISNUMBER(範囲)=FALSE))で件数を数えた- 数字が左寄せになっているセルを目で確認した
=LEN()で余分な文字が無いか見た- 日付なら
=ISNUMBER()で日付として入っているか確かめた - TRIM・CLEAN・CHAR(160)の除去を試した
- 直したあと、残りの件数が0になったか確かめた
よくある質問
#VALUE! と #NUM! は何が違いますか
#VALUE! は「型が合っていない」、#NUM! は「型は合っているが値がおかしい」です。 負の数の平方根を求めた、といった場合が #NUM! です。
セルの表示形式を数値にしたのに直りません
表示形式は見た目だけを変えます。中身が文字列のままなら計算はできません。 VALUE で変換するか、区切り位置を通してください。
空欄が原因になることはありますか
空欄そのものは0として扱われるので原因になりません。 原因になるのは「空欄に見えるが空白文字が入っている」セルです。 ISBLANK で見分けられます。
一度に直す方法はありますか
列全体なら、Excelは「区切り位置」を開いて何も変えずに完了、 スプレッドシートは空セルの1をコピーして「形式を指定して貼り付け → 乗算」で揃います。 どちらも元データを書き換えるので、先に複製しておいてください。
スプレッドシートとExcelで違いはありますか
同じ状況でも返るエラーが違うことがあります。
行数の違う範囲を掛けた場合、Excelは #VALUE!、
スプレッドシートは #N/A や #REF! を返します。
共有先の環境が違うときは、この点を確かめてください。
実際の表で追ってみる
他システムから貼り付けた売上表で、合計は出るのに差額が出ない、という状況です。
| 行 | B列(予算) | C列(実績) | D列 =C-B | 実際の中身 |
|---|---|---|---|---|
| 2 | 100000 | 98000 | -2000 | 両方とも数値 |
| 3 | 100000 | 1,05,000 | #VALUE! | Cが文字列(区切りが不正) |
| 4 | 100000 | 102000 | #VALUE! | Cの末尾に空白 |
| 5 | 100000 | ¥99,000 | #VALUE! | Cに通貨記号 |
ここで =SUM(C2:C5) を出すと 98,000 しか返りません。
3〜5行目は文字列なので、SUMが黙って飛ばしています。
エラーは出ませんが、合計は間違っています。
#VALUE! が出ているうちはまだ良いほうです。 SUMのように無視する関数だけを使っていると、誰も気づかないまま集計が狂います。
数値でないセルを一覧にする
隣の列に次の式を並べると、どの行が何行目で、なぜ数値でないかが並びます。
=IF(ISNUMBER(C2),"",LEN(C2)&"文字 / 末尾コード"&CODE(RIGHT(C2,1)))
末尾コードが 32 なら半角スペース、160 ならノーブレークスペース、 10 なら改行が残っています。数値のセルは空欄になるので、 埋まっている行だけを見ればすみます。
まとめて直す手順
Excelの場合(区切り位置を通す)
- 対象の列を1列だけ選ぶ
- データタブ → 区切り位置
- 「コンマやタブなどの区切り文字…」を選んで次へ → 次へ
- 列のデータ形式で「G/標準」を選んで完了
これで多くの「数字に見える文字列」が数値に変わります。 通貨記号や不正な桁区切りが残る場合は、先に置換で外してください。
Googleスプレッドシートの場合(乗算で揃える)
- どこか空いたセルに
1と入力し、コピーする - 直したい列を選ぶ
- 「編集 → 特殊貼り付け → 演算のみ貼り付け → 乗算」
1を掛けることで、数値として解釈できるものが数値になります。 解釈できないものはそのまま残るので、残ったセルだけを個別に直します。
どちらでも使える方法(作業列)
- 作業列に
=VALUE(TRIM(CLEAN(SUBSTITUTE(SUBSTITUTE(C2,",",""),"¥","")))) - 作業列をコピーし、元の列に「値のみ貼り付け」
- 作業列を削除
内側から、通貨記号を外す → 桁区切りを外す → 改行を外す → 空白を外す → 数値に変換、の順で処理しています。 自分のデータに合わせて、不要な処理は外してください。
再発を止める
- 貼り付けるときに「値のみ貼り付け」ではなく、 一度メモ帳などのテキストに通してから貼ると、書式ごと落とせます
- 入力欄に「データの入力規則」で数値のみを許可しておく
- 条件付き書式に
=AND(C2<>"",NOT(ISNUMBER(C2)))を入れて、 数値でないセルに色を付けておく - 元データを受け取る側の形式(CSVの区切り、文字コード)を先方と揃える
直った後に確認すること
=SUMPRODUCT(--(ISNUMBER(C2:C1000)=FALSE))が0になっているか (空欄も数値ではないので、空欄を除くなら=SUMPRODUCT((C2:C1000<>"")*(ISNUMBER(C2:C1000)=FALSE)))- SUMの結果が、直す前より増えているか(増えていれば、無視されていた行が戻っています)
- 日付の列は
=ISNUMBER()でTRUEになっているか - 時間の合計は、表示形式を
[h]:mmにしたか
見えない文字の一覧
=CODE(RIGHT(A2,1)) や =UNICODE(MID(A2,n,1)) で
出てくる番号の意味です。数値に変換できない原因は、たいていこの中にあります。
| コード | 正体 | 外し方 |
|---|---|---|
| 9 | タブ | CLEAN |
| 10 | 改行(LF) | CLEAN |
| 13 | 復帰(CR) | CLEAN |
| 32 | 半角スペース | TRIM |
| 160 | ノーブレークスペース | SUBSTITUTE(A2,CHAR(160),””) |
| 12288 | 全角スペース | SUBSTITUTE(A2,” ”,””) |
| 65292 | 全角カンマ | SUBSTITUTE(A2,”,”,”,”) |
TRIMは半角スペースしか外しません。 全角スペースとノーブレークスペースは残ります。 Webからの貼り付けでは160が非常に多いので、まずここを疑ってください。
まとめて外すなら、入れ子にします。
=VALUE(TRIM(SUBSTITUTE(SUBSTITUTE(CLEAN(A2),CHAR(160),"")," ","")))
時刻と時間の扱い
時刻は内部では「1日を1とする小数」です。
12:00 は 0.5、6:00 は 0.25 になります。
文字列のままでは足せません。
文字列の時刻を数値にする
=TIMEVALUE(A2) で変換します。
8時30分 のような表記は通らないので、
=TIME(LEFT(A2,1),MID(A2,3,2),0) のように切り出して組み立てます。
合計が24時間で0に戻る
これはエラーではなく表示の問題です。
表示形式をユーザー定義で [h]:mm にすると、
25時間なら 25:00 と出ます。角括弧が「繰り上げない」指定です。
時間を数値(人時)にしたい
=A2*24 で時間数になります。
1日を1としているので、24を掛ければ時間になります。
賃金計算などはこの形にしてから掛けます。
配列で起きる場合
Excelの新しい関数(FILTER、UNIQUE、
SEQUENCE など)は、結果が複数のセルに広がります(スピル)。
広がる先に何か入っていると #SPILL! になり、
行数の合わない範囲どうしを計算すると #VALUE! になります。
Googleスプレッドシートでは ARRAYFORMULA で 明示的に広げます。同じ状況でも返るエラーが違うことがあるので、 共有先の環境が違う場合は実際に開いて確かめてください。
行数が合っているかを確かめる
=ROWS(A2:A100) と =ROWS(B2:B50) を並べて比べます。
ROWS は範囲の行数を返します。
数が違えば、そこが原因です。
受け取るデータ側で止める
毎回同じ場所で起きるなら、貼り付ける前に止めるほうが早いです。
- CSVを開くのではなく、取り込む (Excelはデータ → テキストまたはCSVから、スプレッドシートはファイル → インポート)。 取り込みなら列ごとの型を指定できます
- 文字コードをUTF-8で揃えてもらう。Shift_JISとの混在は文字化けと余分な文字の元です
- 金額列に通貨記号や桁区切りを入れないでもらう。見た目は表示形式で付けられます
- 受け取り用のシートと、集計用のシートを分ける。 受け取り側は生のまま置き、集計側は整えた値だけを見る
「毎回直す」を続けるより、1回だけ形式を決めるほうが早く終わります。
この3つのエラーは、どこが違うのか
見た目は同じ「エラー」でも、原因の層が違います。ここを取り違えると、 直らない場所をいくら触っても直りません。
| エラー | 壊れている場所 | まず見るところ |
|---|---|---|
| #N/A | 探した値が、探した範囲に無い | 検索値の表記ゆれ、範囲の指定 |
| #REF! | 参照先そのものが消えた | 直前に消した行・列・シート |
| #VALUE! | 渡した値の種類が合わない | 数値のはずのセルに入っている文字 |
7種類すべての一覧は スプレッドシートのエラー一覧 にまとめています。
エラーを消す前に
IFERROR で包めば表示は消えます。ただし 原因は残ったままです。 金額や件数の集計で使うと、本来あるはずの数字が静かに欠けます。
消してよいのは「エラーが出るのが正常な場合」だけです。 たとえば、まだ入力していない行が空欄でエラーになる、といった場面です。 それ以外は、消す前に原因を潰してください。