何故にエラー?
ワークシートが1枚存在するブックに対して、↓のマクロを書いて実行したところ、MsgBox は表示されずに、イミディエイトウィンドウに
エラー:13 型が一致しません。
と出ました。
Sub Macro1() On Error Resume Next MsgBox Worksheets(1).Range("A1").Value = "" If Not Err.Number = 0 Then Debug.Print "エラー:" & Err.Number Debug.Print Err.Description End If On Error GoTo 0 End Sub
さて、セルA1には何が入っていたのでしょう?(どういう値だったのでしょう?と書くべきかな。)
一応、答え&解説をば、
問題の本質は、
Worksheets(1).Range("A1").Value = ""
という比較演算が何故エラーになるのかということなんですが、
これは、
Dim X As Variant X = Worksheets(1).Range("A1").Value
としたときに
X = ""
という比較演算がどういう場合に失敗するのか、と読み替えることができます。
もっと言い換えると、比較演算するときに暗黙の型変換が行われているわけですが、Varint 型から String 型に変換できないケースは?ということです。
X は Variant 型で、1つのセルの値なので、型の種類としては
・数値(Double,Date, Currency)
・文字列(String)
・空(Empty)
・エラー値(Error)
のいずれかとなります。
ここまで来れば四択なのでもう分かると思いますが、エラー値は文字列型に変換できません。
という訳で、「セルA1に入っていたのは エラー値」というのが答えです。
具体的にいうと、#N/A,#NAME?,#DIV/0! 等の場合ということです。
※.Excel World の 2007年4月29日 14:29 の日記をコピーしています。
http://excel.sns.fc2.com/excel/