はじめまして。
VBA初心者です。
エクセルVBAで以下のことをしようとしていますが、
「型が一致しません」とエラーが出ます。
何がおかしいのでしょうか。
やろうとしていることは、以下のようなことです。
G2に入っている値を参照し>0なら、H2に”上昇”と表示。
<0なら、”下降”、=0なら”トンボ”と表示させ、G3以降も
G列にデータが入っている限りそのように表示したいと思っております。
よろしくお願いいたします。
Sub 陰陽()
If Range("G2:G10000").Value > 0 Then
Range("H2:H10000").Value = "上昇"
ElseIf Range("G2:G10000").Value < 0 Then
Range("H2:H10000").Value = "下降"
ElseIf Range("G2:G10000").Value = 0 Then
Range("H2:H10000").Value = "トンボ"
End If
End Sub
Sub test()
If Range("G2").Value > 0 Then
Range("H2").Value = "上昇"
End If
End Sub
なら動きますね。では次のはどうでしょう。
Sub test()
If Range("G2").Value > 0 Then
Range("H2:H3").Value = "上昇"
End If
End Sub
これも動くはずです。でも次のは動きません。「型が一致しません」となります。
Sub test()
If Range("G2:G3").Value > 0 Then
Range("H2:H3").Value = "上昇"
End If
End Sub
つまり、この式では、Range("G2:G3").Value の値が一個の数字ではないのでエラーになるわけです。「0」という数字と比べることがエラーになるわけです。ひとつのセルなら一個の数字と比べることができますが、複数のセルの値を一個の数字と比べることができないのですね。
ひとつずつセルを比べるプログラムを書くようにしましょう。
VBAの基本的な考え方は他の人の書かれているとおりですが、質問者さんの書かれているように一括してセルを処理する方法もなくはないです。
VBAからワークシート関数を使ってしまう方法です。配列数式として処理してくれます。
Sub 陰陽
Range("H2:H10000") = Application.Evaluate("=IF(G2:G10000>0,""上昇"",IF(G2:G10000<0,""下降"",""トンボ""))")
End Sub
Range("G2:G10000").Value > 0
のような比較はできません。
やるなら、for文とかでまわす必要があるのでは、
参考までにソースをのせます。
Sub test()
Dim i, j As Integer
For i = 2 To 10000
j = Cells(i, 7)
If j > 0 Then
Cells(i, 8) = "上昇"
ElseIf j < 0 Then
Cells(i, 8) = "下降"
ElseIf j = 0 Then
Cells(i, 8) = "トンボ"
End If
Next i
End Sub
補足
gggggg2009さん ありがとうございます。 こちらでやってみていますが、ステップインで確認すると、なぜか上昇と下降がとばされ、トンボだけになってしまうようなのですが、これはなぜでしょうか。 わたしのやり方がまずいのでしょうか。