| 
    
     |  | おはようございます。 
 >私の挙げた例が良くなかったようです。
 そうですね!!最初から、このわかりやすい投稿がほしかったですね
 
 エラーが起きる状態に当該シートのデータを設定した状態
 (例 セルB1を""にしておけば、セルA1も数式で""になる)で
 以下のコードを実行してみてください。
 
 Sub test()
 Dim i  As Integer  'loop counter
 Dim sum As Integer  'sum
 
 For i = 1 To 5
 
 MsgBox TypeName(Cells(1, (i - 1) * 2 + 1).Value)
 
 sum = sum + Cells(1, (i - 1) * 2 + 1).Value
 Next
 
 End Sub
 
 エラーが発生する直前の Msgboxの変数の型は String ですよね?
 
 確かに
 
 sub samp1()
 Dim a As Long
 a = a + ""
 end sub
 
 とすれば、「型が一致しない」というエラーが発生します。
 
 
 次に数式の結果を値に変換してから 変数の型を調べてみると
 
 Sub test2()
 Dim i  As Integer  'loop counter
 Dim sum As Integer  'sum
 
 For i = 1 To 5
 Cells(1, (i - 1) * 2 + 1).Value = Cells(1, (i - 1) * 2 + 1).Value
 
 MsgBox TypeName(Cells(1, (i - 1) * 2 + 1).Value)
 
 sum = sum + Cells(1, (i - 1) * 2 + 1).Value
 Next
 
 End Sub
 
 表示される変数の型は「Empty」となって、エラーになりません。
 
 これも簡単コードで検証すると、確かにエラーになりません。
 
 Sub Samp2()
 Dim a As Long
 Dim b As Variant
 b = Empty
 a = a + b
 MsgBox a
 End Sub
 
 
 数式で設定した""と値で設定した""では、セルのValueプロパティの型が
 違っていることが エラーになる ならないの原因になっています。
 
 VBAは、型の違う変数や定数の演算に対して親切です。
 
 例1
 
 sub aaa()
 dim b as long
 b=b+"5"
 msgbox b
 end sub
 
 sub bbb()
 dim c as string
 c= c & 5
 msgbox c
 end sub
 
 ↑こんなコードは、型を変換して結果を出してくれます。
 私が、VBAをはじめる前に使っていたBasicでは、
 「型が一致しない」といずれもエラーになりました。
 
 型変換してくれるとコード記述は楽になりますけど、
 やってくれるとものだと思い込んでいるとたまにこういう落とし穴がありますから、
 注意してください。
 
 
 エラーをなくすには、
 
 sum = sum + Val(Cells(1, (i - 1) * 2 + 1).Value)
 
 このようにしておくとよいでしょう
 
 
 |  |