Sub hoge7()
Dim r As Range
Dim rAll As Range '[7-1]
Set rAll = Range("A1:F" & Range("F1048576").End(xlUp).Row) '[7-2]
For Each r In rAll '[7-3]
Debug.Print r.Address
Next
End Sub
Sub hoge8()
Dim r As Range
Dim rAll As Range '[8-1]
Dim mx As Long '[8-2]
mx = Range("F1048576").End(xlUp).Row '[8-3]
Set rAll = Range("A1:F" & mx) '[8-4]
For Each r In rAll '[8-5]
Debug.Print r.Address
Next
End Sub
近藤さんの投稿
(投稿ID: 3640)
for eachの範囲について質問です。
for each in rangeで range( )のrangeの範囲を 1 to J列.end(xlup).row のようにするにはどのように表現すればいいですか?
小川 慶一さんのコメント
(コメントID: 5145)
まずは、基礎編の以下でお伝えした原則がありますね。
「基礎講座第1章2 - オブジェクトの指定」
https://forum.pc5bai.com/lesson/page/98
複数セルを含む範囲の指定は、
のように書けます(他の方法もありますが、そこがご質問の核になる部分ではないので、今は紹介省略)
上記 [1] は、以下の [2] のようにも書けます。これは、基礎編第2章。
そして、以下からは、発展編1で学んだネタと組み合わせます。
調整数型変数 mx で、F列の最終行のセルの行番号を調べましょう。
[2], [3]より、以下となります。
あるいは、以下の [5] でもOK。
For Each 構文の範囲指定に使うということであれば、[5]の .Select より前を取り出して、以下ですね。
もっとも、こんなのはじめから書ける必要はありません。
もっと分解して、まずはこんなところからできればいいんじゃないでしょうか↓。
というか、たぶん上記[7]でも難しいかと思います。
ということで、さらに分解。最初の最初は、こんなところからできるようになればよいかと↓。
もっとも、For Each構文は他の構文と比べて登場する部品が抽象的です。
慣れないうちは、できるだけ具体的にできるところは具体的にしたほうが良いかと思います。[6]のような書き方は、かなり慣れてからでなければお勧めできません。
[6]より[7], [7]より[8]のほうがお勧めですね。
[8]の書き方で書き飽きたら[7], [7]の書き方で書き飽きたら[6]、と進化していってください。
まずは、こんなところで回答としてはいかがでしょうか。
近藤さんのコメント
(コメントID: 5147)
下記のご回答ありがとうございます。
練習を重ねてマスターできるよう精進します!