|
おはようございます。
>私の挙げた例が良くなかったようです。
そうですね!!最初から、このわかりやすい投稿がほしかったですね
エラーが起きる状態に当該シートのデータを設定した状態
(例 セル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)
このようにしておくとよいでしょう
|
|