【Excel】#VALUE!エラーが表示される原因と直し方

  • URLをコピーしました!

Excelで数式や関数を使用していると、「#VALUE!」エラーが表示されることがあります。

主な原因は、数値として計算できない文字列が含まれていることや、関数の引数に不適切な値を指定していること、複数の範囲の大きさが合っていないことです。

この記事では、「#VALUE!」エラーが表示される主な原因と直し方を、具体的な数式を使って解説します。

目次

1:関数の引数に不適切な値を指定した

引数に特定の数値以上を指定しなければならないにもかかわらず、その数値未満や文字を指定してしまうと「#VALUE!」エラーが発生してしまう場合があります。

例1:VLOOKUP関数

VLOOKUP関数は第3引数に何列目のデータを取得するかを指定します。この引数に、0以下もしくは文字を指定すると「#VALUE!」エラーが発生します。

エラーサンプル:第3引数の指定に誤りがある
=VLOOKUP("株式会社あいう",D3:F6,0,FALSE)   // 第3引数に0以下を指定したため、エラー
=VLOOKUP("株式会社あいう",D3:F6,"A",FALSE)  // 第3引数に文字を指定したため、エラー

解決方法は、第3引数に1以上の整数を指定してください。

また、VLOOKUP関数の「#VALUE!」エラーは第3引数の指定ミスである可能性が高いことを覚えてください。

=VLOOKUP("ヤマダ",D3:F6,3,FALSE) 

例2:LEFT関数/RIGHT関数

LEFT関数は文字列の先頭〇文字を取得し、RIGHT関数は末尾〇文字を取得する関数です。
ともに第1引数に元となる文字列、第2引数に何文字取得するかを指定します。

LEFT関数やRIGHT関数は、第2引数に0未満の数値や文字を指定すると、「#VALUE!」エラーが発生します。

エラーサンプル:第2引数の指定に誤りがある
=LEFT("ABC",-1)     // 第2引数に0未満の数値を指定したため、エラー
=RIGHT("ABC","B")   // 第2引数に文字を指定したため、エラー

解決方法は、第2引数に0以上の数値を指定することです。
LEFT関数の第2引数にSEARCH関数を組み合わせると、指定した文字までを取得できます。

// 先頭1文字を取得する(「A」と表示される)
=LEFT("ABC",1)

// 末尾1文字を取得する(「C」と表示される)
=RIGHT("ABC",1)

// 先頭から"B"まで取得する(「AB」と表示される)
=LEFT("ABC",SEARCH("B","ABC"))

例3:MID関数

MID関数は〇文字目から、×文字取得する関数です。

MID関数の第2引数には、文字を取り出し始める位置を1以上の数値で指定します。第3引数には、取り出す文字数を0以上の数値で指定します。
第2引数に0以下の数値を指定した場合や、第3引数に負の数を指定した場合は、「#VALUE!」エラーが発生します。

エラーサンプル:第2引数、第3引数の指定に誤りがある
=MID("ABCDEF",-1,10)    // 第2引数に0未満の数値を指定したため、エラー
=MID("ABCDEF",3,"あ")   // 第3引数に文字を指定したため、エラー

第2引数には1以上、第3引数には0以上の数値を指定してください。

// 「BCD」と表示される
=MID("ABCDEF",2,3)

// 「ABC」と表示される
=MID("ABCDEF",1,3)

2:引数で指定した範囲の行数や列数が合っていない

例:XLOOKUP関数/SUMPRODUCT関数

XLOOKUP関数は、検索範囲と戻り範囲の対応する行数または列数が異なると、「#VALUE!」エラーが発生します。
SUMPRODUCT関数は、指定した範囲の行数や列数が一致しないと、「#VALUE!」エラーが発生します。

エラーサンプル:D3:D6とE3:E16で範囲の大きさが異なる
// 第2引数と第3引数の範囲(行数)が異なるため、エラー
=XLOOKUP("ヤマダ",D3:D6,E3:E16)

// 第1引数と第2引数の範囲(行数)が異なるため、エラー
=SUMPRODUCT(D3:D6,E3:E16)

XLOOKUP関数やSUMPRODUCT関数で「#VALUE!」エラーが表示された場合は、まず範囲の指定を確認してください。

XLOOKUP関数では、検索範囲と戻り範囲の対応する行数または列数をそろえてください。
SUMPRODUCT関数では、指定する各範囲の行数と列数をそろえてください。

=XLOOKUP("ヤマダ",D3:D6,E3:E6)
=SUMPRODUCT(D3:D6,E3:E6)

3:検索対象にない文字を検索した

SEARCH関数やFIND関数で第2引数の文字列から、第1引数の文字を検索する際に、存在しない文字を検索するとエラーになります。

例:SEARCH関数/FIND関数

SEARCH関数とFIND関数はともに、第2引数(文字列)の中に第1引数(文字/文字列)が先頭から何文字目にあるかを返す関数です。

SEARCH関数とFIND関数の違いは、大文字小文字を区別するかとワイルドカードの使用可否の2点です。
SEARCH関数は、大文字小文字を区別しません。ワイルドカードを使用できます。
FIND関数は、大文字小文字を区別します。ワイルドカードを使用できません。

これらの関数は検索する文字が含まれていないと、「#VALUE!」エラーが発生します。
なお、FIND関数では、検索する文字と検索対象の文字の大文字・小文字が一致しない場合も、「#VALUE!」エラーが発生します。

エラーサンプル1:"ABC"の中に"Z"は何番目にあるか
// ”ABC”の中に"Z"は存在しないため、エラー
=SEARCH("Z","ABC")

// ”ABC”の中に"Z"は存在しないため、エラー
=FIND("Z","ABC")

エラーサンプル2:"ABC"の中に"b"は何番目にあるか
// FIND関数は大文字と小文字を区別するため、エラー(SEARCH関数なら2が返る)
=FIND("b","ABC")

エラーサンプル3:"ABCDE"の中に"B*C"は何番目にあるか
// FIND関数はワイルドカードを使用できないため、"*"の文字を検索する(SEARCH関数なら2が返る)
=FIND("B*C","ABCDE")

解決方法は、検索対象にない文字を検索した場合を想定しているとき、IFERROR関数を使用すると、エラーメッセージや別の値を表示できます。

第1引数には検索する文字、第2引数には検索対象の文字列を指定します。順番を逆にすると、意図した結果にならない場合や、「#VALUE!」エラーになる場合があるため注意してください。

FIND関数を使用しているときに、大文字小文字の区別をせずに文字の位置を取得したい場合は、SEARCH関数を使用してください。

【検索する文字が存在しなかった場合、エラーメッセージを返す】
 ※A1セルに"Z"、A2セルに"ABC"が入力されているとします。
=IFERROR(SEARCH(A1,A2),"["&A1&"]は["&A2&"]にありません")
=IFERROR(FIND(A1,A2),"["&A1&"]は["&A2&"]にありません")
 ※ 上2つは 「[Z]は[ABC]にありませんと表示される

検索する文字が存在しない場合、「-1」を返す】
// 「-1」と表示される
=IFERROR(SEARCH("Z","ABC"),-1)

// 「-1」と表示される
=IFERROR(FIND("Z","ABC"),-1)

【大文字小文字を区別せずに文字を検索する(FIND関数は不可
//「3」と表示される
=SEARCH("c","ABC")

【ワイルドカードを使用して検索する(FIND関数は不可)】
// 「2」と表示される
=SEARCH("B*C","ABCDE")

4:文字列を数値として扱った

文字列を数値として扱うと「#VALUE!」エラーが発生します。

例1:文字列を四則演算してしまった

文字を四則演算してしまうと「#VALUE!」エラーが発生します。
※四則演算とは、足し算や引き算、掛け算、割り算のことです。

エラーサンプル:文字列に四則演算(+, -, *, /)をした
// "ABC"に1を足せない(文字を結合したい場合は & を使用する)
="ABC"+1  

// "ABC"から"A"を引けない(文字を削除したい場合は SUBSTITUTE関数を使用する)
="ABC"-"A"

解決方法は、文字列に四則演算を使用しないことです。

文字列を結合する場合は「&」、文字列内の特定の文字を削除したい場合は「SUBSTITUTE関数」を使用します。

【文字列の連結を行う】
// "ABC"と1を結合して、「ABC1」と表示される
="ABC"&1

【文字列を削除する】
// "ABC"から"A"を削除して、「BC」と表示される
=SUBSTITUTE("ABC","A","")

例外的に、数式内に全角で入力した数字などの数値に変換可能な文字は、Excelによって半角に自動変換されるため計算できます。
例:「=11+11」と入力すると、「22」が表示されます。

例2:VALUE関数

VALUE関数は、文字列を数値に変換する関数です。
例えば、「=VALUE("1,000")」なら「1000」を返します。

VALUE関数の引数に数値へ変換できない文字を入れてしまうと「#VALUE!」エラーが発生します。

エラーサンプル:"1,000A"を数値に変換
// "1,000A" の "A" があると数値に変換不能
=VALUE("1,000A")

解決方法は、数値に変換できない文字が誤って含まれている場合は、その文字を削除または修正してください。
数値に変換できない値が入力される可能性もある場合は、IFERROR関数を使用すると、エラーメッセージや別の値を表示できます。

【数値に変換できなかった場合、エラーメッセージを返す】
// 「数値へ変換できませんでした。」と表示される
=IFERROR(VALUE("1,000A"),"数値へ変換できませんでした。")

【数値に変換できなかった場合、「-1」を返す】
// 「-1」と表示される
=IFERROR(VALUE("1,000A"),-1)

5:引数に型の違う値を指定した

引数でセルの範囲や論理値を指定するところを、誤って文字列にしてしまうと「#VALUE!」エラーが発生します。

例1:SUM関数/AVERAGE関数

SUM関数やAVERAGE関数などの引数で範囲を指定するところを文字列にしてしまうと「#VALUE!」エラーが発生します。

エラーサンプル:範囲を指定したつもりで、文字列にしてしまった
 ※A1セルに「1」、A2セルに「2」、A3セルに「3」が入力されているとします。
// 下2つは、引数を「"」で囲っているため、範囲とならずに文字列になってしまった
=SUM("A1:A3")
=AVERAGE("A1:A3")

解決方法は、ダブルクォーテーションを外すことです。

A1セルに「1」、A2セルに「2」、A3セルに「3」が入力されているとします。
// 「6」と表示される
=SUM(A1:A3)

// 2」と表示される
=AVERAGE(A1:A3)

例2:IF関数

IF関数の第1引数に条件式を指定するとき、条件式全体をダブルクォーテーションで囲むと「#VALUE!」エラーが発生します。

エラーサンプル:条件式(論理値)を指定したつもりで、文字列にしてしまった
 ※A1セルに「50」が入力されているとします。
=IF("A1<100","A","B")  // 「"」で囲っているため、文字列になってしまった

解決方法は、ダブルクォーテーションを外すことです。

A1セルに「50」が入力されているとします。
=IF(A1<100,"A","B")  // 「A」と表示される

IF関数の第2引数や第3引数に別の数式を指定している場合は、それぞれの数式に誤りがないかを優先して確認してください。
数式を単独でセルに入力すると、どちらでエラーが発生しているかを確認できます。

まとめ

「#VALUE!」エラーは、関数の引数に不適切な値を指定している場合や、文字列を数値として計算している場合などに表示されます。

XLOOKUP関数やSUMPRODUCT関数では範囲の行数・列数、SEARCH関数やFIND関数では検索する文字、VLOOKUP関数や文字列操作関数では引数の指定を確認してください。

IFERROR関数を使うとエラーの代わりに別の文字や数値を表示できますが、まずは数式や引数を見直して、エラーの原因を修正することが大切です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

元・エクセル迷子。関数やグラフに頭を抱えつつ、地道に勉強してきました。
今では「むずかしいを、やさしく」にこだわって、初心者さん向けにExcelのコツを発信中。
「なんか分かるかも!」って思える瞬間を一緒に楽しみましょう♪

目次