VBA で For Each文の注意点

試してみればすぐ分かることなんだけど、下のように書いても、A1:A5に「1」は入力されません。

Sub test()
  Dim tmp As Variant

  For Each tmp In Range("A1:A5")
    tmp = 1
  Next tmp
End Sub

この理由は、変数tmpに入れられるものは、Rangeオブジェクトの参照ではなく、コピーだからです。ですから、そうしたい場合は、次のようにかく必要がある。

Sub test()
  Dim tmp As Variant

  For Each tmp In Range("A1:A5")
    Range(tmp.address) = 1
  Next tmp
End Sub