範囲の中の行または列でループ

ある指定範囲の中の、ある指定列について処理したい。例えば、こんな感じです。

f:id:Infoment:20180717065319p:plain

Set myRng = Range("B2:F10") で myRng に指定範囲をセットし、何かの都合でその3列目について処理したい。気持ちとしては、こんな感じで上手く動いて欲しいところです。

Sub test()
    Dim myRng As Range
    Dim r     As Range
    
    Set myRng = Range("B2:F10")
    ' myRngの3列目でループ。
    For Each r In myRng.Columns(3)
        Debug.Print r.Address
    Next

End Sub

でも実際、イミディエイトウィンドウに表示されるのは「$D$2:$D$10」の一行のみ。3列目のセルを一つずつ取り出して処理してくれません。

長年、どうやったら解決できるのか疑問に思っていたのですが、先日とある切っ掛けで解法を得ました。

Sub test()
    Dim myRng As Range
    Dim r     As Range
    
    Set myRng = Range("B2:F10")
    ' myRngの3列目でループ。
    For Each r In myRng.Columns(3).Cells
        Debug.Print r.Address
    Next

End Sub

範囲指定の最後に「.Cells」を付けるだけで良かったようです。
 For Each r In myRng.Columns(3).Cells

これでまた、コードを圧縮することで出来るようになりました。
備忘録を兼ねて紹介します。

参考まで。