【Rangeと変数の応用】データの最終行を見つける方法

Level5 VBA・マクロ

「Rangeを利用して1行ずつズラしながら処理したい」
「Rangeを利用して最終行が何行目か知りたい」
「Cellsは分かりにくいから使いたくない」

安心してください。
「Rangeと変数の組み合わせ」で望みのままに処理できます。
Rangeで最も読みやすく、間違いの少ない最強の書き方になります。

今回は、第6回で予告した「Cellsを使わない派の最終奥義」を伝授します。
これさえ覚えれば、エクセルのシート上を縦横無尽に、自由自在に駆け回るマクロを作れるようになりますよ!


接着剤「&」で、Rangeに知能を与える

第6回で学んだ通り、Rangeは Range("A1") のように住所を書きます。
この "A1" というのは、VBAにとっては単なる「文字」です。

では、この住所の「数字の部分」だけを変数(箱)に置き換えてみましょう。
ここで登場するのが、文字と数字をつなぐ「&(アンパサンド)」です。

  • 基本: Range("A5")
  • 変数を使う: i = 5 とした状態で、 Range("A" & i)
たんたん
たんたん

” A ” & i は i=5だから”A5″になるよ!

そして変数iは文字列として認識されたくないから「” “」を付けないでね。

もし”A&i”って入力したら、
マクロは「セルA&i」を探しに行っちゃうよ。


なぜ「Cells(i, 1)」より「Range(“A” & i)」がいいの?

多くの教科書が教える Cells(i, 1)
実はこれには、実務上の大きな罠があります。

  1. 列が「数字」だと直感的に分からない: 
    Cells(i, 25) と書かれて、即座に「あ、Y列のことだ!」と分かる人はまずいません。
    でも、Range("Y" & i) なら誰でも一目でわかります。
  2. 手作業のイメージが崩れない: 
    私たちの頭の中は「A列の、i行目」という風に考えています。
    Rangeを使うことで、「思考」と「コード」が1ミリもズレずに一致するのです。
たんたん
たんたん

パッとイメージできるRangeじゃないと
VBAと手作業に差を感じちゃうよ。

一瞬でイメージできるからこそ
作成もメンテナンスも楽になるんだ。


実務の壁を突破!「最終行」を自動でつかむコード

Rangeで自動でセルを選択できるようになると、データの最終行を発見できます。

最終行の発見はVBAで処理すべき範囲を自動で設定できることと同じです。

たんたん
たんたん

毎回「100行目まで」って決まってる作業ならいいけど
状況に応じて変わることが大半だよ。

その度にコードを書き換えるなら、手作業でやっても同じ。

だから何行目まで処理すべきかもVBAで自動発見すべきなの!

そこで、VBA界で最も有名な「最終行を取得するコード」をRangeバージョンで覚えましょう。

lastRow = Range("A" & Rows.Count).End(xlUp).Row

一見長く見えますが、手作業をスロー再生すれば一瞬で理解できます。

  1. Range("A" & Rows.Count)
    A列の、一番下のセル(104万8576行目)にワープせよ!
  2. .End(xlUp)
    そこから End + ↑(上矢印) を押せ!
  3. .Row
    止まった場所の「行番号」を教えて!
たんたん
たんたん

「End +矢印」は「Ctrl+矢印」と同じだよ。

実際に「動くRange」を体験してみよう!

それでは、変数とRangeを組み合わせて、データの最終行に色を塗るマクロを書いてみましょう。

Sub 最終行を黄色にする()
    Dim lastRow As Long
    
    ' 1. A列の最終行を調べて、箱(変数)に入れる
    lastRow = Range("A" & Rows.Count).End(xlUp).Row
    
    ' 2. メッセージで報告
    MsgBox "データの最終行は " & lastRow & " 行目ですね!"
    
    ' 3. その場所(A列の最終行)を黄色く塗る
    Range("A" & lastRow).Interior.Color = vbYellow
End Sub

このマクロを実行すると、データが10行あっても100行あっても、
常に「一番下のセル」をピタリと言い当てて色を塗ってくれます。
Cellsを使わなくても、これほど賢い動きができるのです。

たんたん
たんたん

サンプルを動かしてみよう!


【まとめ】

  • Range("A" & i) で、セルの場所は自由自在に動かせる!
  • 文字と変数のつなぎ役は &
  • 最終行は Range("A" & Rows.Count).End(xlUp).Row で自動取得。
  • Cellsを使わないほうが、実務の変更に強く、読みやすい!

これで、あなたは「固定されたセル」を操作する段階を卒業し、
「データの量に合わせて動くマクロ」の入り口に立ちました。

次回は、複数のシートやブックをまたいで作業するための「シートの指定方法」を解説します。
「別のシートに勝手に書き込まれた!」という、VBAあるあるの悲劇を防ぐための親子関係について学んでいきましょう!

コメント

タイトルとURLをコピーしました