「#n/a 文字列として判断されない VBA」
という検索キーワードでアクセスがありました。
Excelの#N/Aエラーを文字列と誤解していた方による検索です。
Excelのエラー値は文字列ではない
#N/Aエラーに限らず、Excelのセルに表示されるエラーは文字列ではありません。
エラー値と呼ばれる、文字列とは別の種類のデータです。
Excelのデータ型は4つ
そもそもExcelの基本となるデータ型は4つです。
- 数値
- 文字列
- 論理値
- エラー値
の4種類です。
#N/Aエラーに限らず、エラーは文字列ではなく、まったく別のデータ型・エラー値です。
TYPE関数でデータ型を調べよう
Excelには、データ型を調べるTYPE関数が用意されています。
先ほどの4種類のデータをセルに入力して、TYPE関数の戻り値を見て、4つのデータ型を意識しましょう。
A1セルに数値の「12345」
A2セルに文字列の「abcde」
A3セルに論理値の「TRUE」
A4セルにエラー値の「#N/A」
をそれぞれ入力して、B1:B4セルに
=TYPE(A1)
といった式を入力すると下図のような状態になります。
#N/AエラーをVBAで判定するなら
で、VBAでExcelの#N/Aエラーを判定したいのならば、VBAのCVErr関数を使ったり、WorksheetFunction.IsNAメソッドを使ってください。
Range.Textと文字列の「#N/A」を比較すると
ネット上の掲示板には、Range.Textプロパティで取得した文字列と、文字列としての「#N/A」を比較して判定するといった書き込みも見かけます。
確かに、セルに「#N/A」と表示されている場合は、判定できます。
しかし、列幅が狭くなって下図のようになっている状態では、正しく判定できません。
上図の状態で、
? Range("A4").Text = "#N/A"
をイミディエイトウィンドウで実行すれば、Falseになってしまうことを確認できます。
最終更新日時:2022-12-15 11:14
- Newer:Excel VBAのRows.CountLargeとは
- Older:ISBLANK関数を使って空白なら空白にする
Home » Excel VBA Rangeオブジェクト » Excel VBAで#N/Aが文字列と判定されない??