Home » ExcelVBA Rangeオブジェクト » Excel VBAで#N/Aが文字列と判定されない??

Excel VBAで#N/Aが文字列と判定されない??

動作検証バージョン:64bit Windows 10 Pro + 32bit Excel(バージョン2209 ビルド15629.20156 Microsoft Store)

「#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

[スポンサードリンク]

Home » ExcelVBA Rangeオブジェクト » Excel VBAで#N/Aが文字列と判定されない??

「ExcelVBA Rangeオブジェクト」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.