この初心者にはまったく意味不明なコードについて解説したいと思います。
オチ
Cells(104万行,列番号).コントロールキー + ↑(PgUp) (.そのセルの行番号)
です
Rows.Count オブジェクトの行数を数えます。
Worksheets("シート名").Rows.Countの場合は全行。
Worksheets("シート名").Range("C10:E109").Rows.Count
の場合はRangeの範囲の中の行数(つまり100行)。
Cells(行番号,列番号)
.End(xlUp)
コントロールキー + ↑(PgUpキー)
.Row
そのセルの行番号の数字です(ただそれだけ)。
ワークシートの最終行(100万行)に移動してから、上の空白でないセルに移動して そのセルの行番号
Worksheets("シート名").Cells(Rows.Count,1).End(xlup).Row
なのです。
Worksheets("シート名").Cells(Rows.Count,1).End(xlup)
はRange(セル)なのでたった最終行の番号を調べるためだけに使い捨てにするのは非常にもったいないのです。
Dim rng as Range,i as Long
Set rng = Worksheets("シート名").Cells(Rows.Count,1).End(xlup)
For i = 1 to rng.Row
の方がまだわかり易いですし、利用の可能性が広がると思います。
余談
Rows.Countをたった最終行の番号を調べるためだけにRows.Countを使用するのは非常にもったいないのです
列をループするときは
For i = 2 to 最終行番号
や
For r(Row) = 10 to 最終行番号
など、データのある行番号からループさせることが多いと思います。
Range("C10:E109").Rows.CountとすればRange("C10:E109")の行数を取得することが出来
For i = 1 to Range("C10:E109").Rows.Count
Range("C9").Offset(i,0).value
Next i
For i = 1 to Range("C10:E109").Rows.Count
Range("C10:E109").Cells(i,1).value
Next i
でデータ行がどこから始まろうとも、ループの開始を 1 で揃えることが出来、今後はデータがどこから始まるのか?を探すことの方が多くなると思います。