「列の1番下まで処理をしたい!でも毎回行数が変わるし1番下の行検索出来ないかな。。」と思った事はありませんか?
今回はVBAで最終行を取得する方法について解説します。
Excelでマクロを使用するなら避けては通れない道です!!
- VBAを使ってデータの最終行を取得したい人
- 最終行を取得するコードの意味を知りたい人
- 最近Excel VBAの学習を始めた人
最終行の取得方法
個別に解説していく前にこちらが最終行の取得方法です!!
1 |
Cells(Rows.Count, 1).End(xlUp).Row |
このコードではA列のデータが入力されている1番下のセルが、何行目にあるかを取得する事が出来ます。
A列ではなくB列やC列の最終行を取得したい場合は、赤くなっている数字を変更してください。
A列=1、B列=2、C列=3、、、、のように数字を増やします。
コードを詳しく解説
Cells( 行インデックス , 列インデックス )
Cellsプロパティはワークシート上のセルを選択する事が出来ます。
行インデックスと列インデックスはセルの座標のようなもので、例えば上から2番目で左から3番目のセルを選択する場合は Cells(2,3) のように記述します。
Excelの表は列がA,B,C,Dのようにアルファベットで表示されていますが、Cellsプロパティを使用する時は数値で記述します。
A列は「1」、B列は「2」、C列なら「3」、、、のように数字を入力します。
冒頭でご紹介したコードでは行インデックスが「Rows.Count」となっていましたが、これはワークシートの全ての行をカウントした数になります。
Excel 2007以降の形式で作成されたブックでは1,048,576行、それ以前の形式では65,536行が最大行数ですので、前者の形式で数字になおしてみるとこのような感じになります。
1 |
Cells(1048576, 1).End(xlUp).Row |
私がマクロでこんな書き方してる人を見つけたら鼻水を吹き出す自信があります!!笑
.End( 方向 )
先程のCellsプロパティではA列のシート最終行(セル番地:A1048576)を指定していました。
しかしながら処理をするのはデータが入力されている部分の最終行で良いですよね。
それに104万行も毎回処理していたら動作が遅くて仕事にならない可能性があります。
データが入力されている最後の行を探す為には、最終行から上方向に向かってデータを探せば確実です!!
という訳でA1048576から上方向にデータが入ってるセルがないか探すわけですが、
上方向に探す時は End(xlUp) を使用します。
今回は上方向でしたが、上下左右で()内に記述するコードが違いますのでリストにしておきます。
- xlUp (上方向)
- xlDown (下方向)
- xlToLeft (左方向)
- xlToRight (右方向)
ちなみにA1から下方向にデータが入ってるセルがないか探す場合は下記のようなコードになります。
1 |
Cells(1, 1).End(xlDown).Row |
こちらも便利ですが表の一部にデータが入力されていない状態では、正確に最終行を取得する事が出来ません。データが抜けているセルの直前のセルが最終行として認識されてしまいエラーに繋がる事もありますのでご注意下さい。
.Row
最後に重要なのがこちら。
Rowを付ける事によって最終行を整数で取得しています。
これが無いと、行ではなくセルそのものを取得してしまう事になりますのでご注意下さい。
まとめ:使い方次第でコードを調整する
最終行を取得する方法は他にもいくつかありますが、今回は私が多用しているものをご紹介させて頂きました。
最終行の取得はExcelでマクロを作成する上で必要不可欠な技術ですが、正直なところ最初は難しくて覚えられないんですよね。。。
結構な頻度で使用していましたが全く覚えられない為、潔く覚えるのを諦めて解説サイトにサンプルコードを取りに行く作業をしていました。
流石にマクロを始めて数年経った今では何も見ずに記述出来ますが、始めのうちは無理せずに毎回確認しても問題ありません。
使い方次第で出来る事の幅が格段に広がりますが、使いこなすにはその表の特徴をよく見てみる事が良いと思います。
例えばA列には全てのセルにデータが入ってないが、B列は必ず入力されている等の基本的な特徴を抑えるだけで、マクロの作成がスムーズになりエラーが発生しにくいものを作成することも出来る様になります。
コメント