何故にエラー?

ワークシートが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/