0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

最終行番号の取得 Cells(Rows.Count,列番号).End(xlup).Rowについて

Last updated at Posted at 2025-03-03

この初心者にはまったく意味不明なコードについて解説したいと思います。
オチ

  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 で揃えることが出来、今後はデータがどこから始まるのか?を探すことの方が多くなると思います。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?