関数の引数に誤りがあるときなどに表示されます。
「#NUM!」エラーと同じように、数式内で使用している数値やアドレスなどに誤りがあるときに発生します。下図のセルC2は「=A1+A2」という数式でセルA1とセルA2を合計していますが、セルA2に計算できない文字列が入力されているため「#VALUE!」エラーが発生しています。
ただし、SUM関数で合計するセル範囲の中に文字列が含まれているとき、SUM関数は「#VALUE!」エラーになりません。これは、SUM関数が文字列を無視する仕様だからです。
ほかにも、数値を指定しなければならない引数に文字列を指定してしまうのは、次のようなケースが考えられます。
上図のセルC2は「=RANK(A2,A1:A2)」という数式で、セル範囲A1:A2の中で、セルA2の順位を求めています。順位を求めようとしているセルA2は数値ではなく文字列なので順位を求められません。そこで「#VALUE!」エラーが発生しました。
ちなみに、同じセル範囲A1:A2であっても、正しく数値が入力されているセルA1の順位を求めることはできます。「=RANK(A1,A1:A2)」はエラーにならず「1」が返ります。
下図のセルD2には「=LEFT(A1,B1)」という数式が入力されています。LEFT関数は文字列の左側から、指定した数の文字列を抜き出す関数です。LEFT関数の第2引数には「何文字を抜き出すか」という数値を指定しなければなりません。下図ではセルB1に数値ではなく「三文字分」という文字列が入力されているために「#VALUE!」エラーが発生しました。
YEAR関数は、指定した日付の年を返す関数です。たとえば「=YEAR("2009/08/22")」は「2009」を返します。YEAR関数の引数には、シリアル値または日付と認識できるデータを指定しなければなりません。下図のセルB2に入力した「=YEAR("今年")」は、引数の「今年」という文字列をExcelが日付と認識できませんので「#VALUE!」エラーが発生します。
「#VALUE!」エラーが発生するもう一つの原因は、アドレスの指定誤りです。1つのセルを指定しなければならない引数に複数のセル(セル範囲)を指定したり、逆にセル範囲を指定しなければならない引数に単体のセルを指定したときにも「#VALUE!」エラーが発生します。
上図のセルD2「=A1+A1:B1」は、単一のセルと複数のセル(セル範囲)を加算しようとしているため「#VALUE!」エラーが発生しました。
上図のセルC3には「=RANK(A1:A2,A1:A2)」という数式を入力しています。RANK関数は1番目の引数で指定したセルの順位を求める関数ですので、順位を求めるセルは単一のセルでなければなりません。ところが、順位を指定する引数にセル範囲A1:A2と複数セルを指定しているため「#VALUE!」エラーが発生しました。
ただし、参照式や関数式で、本来は単一セルを指定する引数にセル範囲を指定してもエラーにならないケースがあります。たとえば下図のセルC2には「=A1:A2*2」という数式を入力しています。
「=A1*2」はセルA1に入力されているデータを2倍する数式ですが、「=A1:A2*2」は複数のセル(セル範囲)を2倍せよという意味になります。それなのに、「=A1:A2*2」がエラーにならず計算結果を表示しているのは「共通部分の参照」が行われたためです。
上図のような表で解説します。B列(商品B)、C列(商品C)、D列(商品D)について、2行目に「売上」の数値、3行目に「原価」の数値が入力されています。4行目の「利益」には、2行目(売上)から3行目(原価)を引く数式を入力します。たとえば、セルB4に「=B2-B3」と入力すると正しく「105」と計算されます。
では、セルC4に「=B2:D2-B3:D3」という数式を入力してみましょう。複数のセル(セル範囲)から複数のセル(セル範囲)を引くという数式です。本来なら単一のセルを指定しなければならないアドレスに、セル範囲のアドレスを指定しています。結果は、正しくセルB2からセルC2を引いた「100」が表示されます。
セルC4に入力した「B2:D2」は、数式を入力したセル(C4)の列(C)と「B2:D2」が交差するセル(C2)を参照します。同じように「B3:D3」もセルC3を参照するため、「=B2:D2-B3:D3」は「=C2-C3」と同じ計算結果を返します。
このような計算(参照)のしかたを共通部分の参照と呼びます。
共通部分の参照は、名前と一緒に使うと可読性が高まります。セル範囲B2:D2に「売上」、セル範囲B3:D3に「原価」という名前を付けると、次のようにセルB4、セルC4、セルD4で同じ数式による計算が可能になります。
引数に指定した文字列や数値が正しいかどうかを確認します。単一セルを指定すべき引数にセル範囲を指定していないかどうかは、数式が入力されているセルを編集状態にして、引数のアドレスと実際のセルの位置を確認します。