ワークシート関数を使っていると、打ち間違いでエラー値が返ってくることがあります。
エラー値には、#####、#VALUE!、#NAME?、#DIV/0!、#N/A、
#REF!、#NUM!、#NULL! の8種類があります。
あるとき、そのエラー値をコピーして、値貼り付けをしたところから疑問が始まりました。
左のワークシート関数では、VLOOKUP関数で検索条件を設定するA7のセルが空欄であるため、A8に #N/Aエラー が表示されています。 | |
これをコピーして、A10に 値貼り付けをしました。 | |
文字列あつかいなので、当然、バックスペースなどで編集ができます。 | |
ところが、B10に「文字」という文字列を入力して、C10にA10とB10の文字列をつないだものを表示させようとすると、『#N/A文字』とならずに、単に #N/A となってしまいます。 A11とB11の文字列をつないだものは、『ある文字』となっています。 |
|
この原因をさぐるために、A13に#N/Aを値貼り付けしたあと、C13でISERROR関数を使って調べてみました。 すると、おもしろいことに『#N/A』をエラーメッセージだと認識しています。 比較として、A14の内容を調べてみると、エラーではないと返ってきています。 つまり、エラー値は、文字列そのものがエラーとしての働きをする特殊な文字列だということになります。 |
今度は、VBAで扱ってみることにします。
A18の『#N/A』が値貼り付けされた文字であることから、変数aを文字列で宣言しました。
(ア)でA8を変数aに代入しようとすると、エラーになりました。
これは、VLOOKUP関数がエラーを起こしているので、当然と言えば当然ですね。
ところが、(イ)の値貼り付けした『#N/A』でも同じようにエラーになってしまいます。
やっぱり、エラー値は特殊な文字列として扱っているようです。
(ア) |
|
(イ) |
上では、String型にエラー値を格納しようとしましたが、うまくいきませんでした。
しかし、Variant型なら、格納できるようです。
Sub a3() Dim a As Variant a = Cells(10, 1) ← ここで格納 Debug.Print a ← イミディエイトウィンドウなら表示できる。 End Sub |
|
Sub a4() Dim a As Variant a = Cells(10, 1) ← ここで格納 MsgBox a ← メッセージボックスだとエラーになる。 End Sub |