Endモード
これはExcelそのものの機能的な話になりますが、ExcelにはEndモードというものが備わっているのをご存知でしょうか?
これはデータの終端を探す機能ですね。下図の様なシートだった場合を想定してみます。
例えば「A1のセルを選択→Endキー→矢印右を押す」とどうなるでしょうか?
この様に右側の終端まで一気に選択しているセルが移動してくれます。
この機能を利用してそもそもExcelの終端から表の最終行や最終列を取得しようじゃないかというのが今回の趣旨ですね。
そもそもExcelの終端から表の最終行とはどういう事でしょうか。というのは下記をご覧いただければお分かりいただけるかと思います。
この1048576というのがExcelの最終行ですね?そこからEndモードを使ってデータがある所まで一気にジャンプしたわけです。
VBAで書いてみましょう
VBAではEndステートメントと言います。VBA側でもEndのキーワードは入ってきます。このEndステートメントを実行する為に今回は「行」と「列」を表す新しいワードを覚えておきましょう。
- Row(ロウ) … 行(縦軸)の事です。
- Column(カラム) … 列(横軸)の事です。
- ○○.Count … ○○の部分に入るものの個数をカウント(数える)というものです。
上記のワードを使用してVBAを書いていきます。
今回は最終行の取得が目的なので最終行・1列目からEndモードで上に上がった所が目的地です。
まずはCellsで行の指定をRows.Count、列の指定を1
なぜ先程Rowでお勉強したRowがいきなりRowsと複数形になっているのかというと、複数ある行の数を数えたからです。という事でこのようなパターンの時はsを付けるのを忘れないようにしましょう。
次から.Endで区切ってxlUpと書いてますね?これは上に上がるという事です。まさに先程の操作の事です。
そして駆け上がった所のRow(行)が今回の目的地ですよ。と
Cells(Rows.Count, 1).End(xlUp).Row
長文になるとちょっと混乱しますが落ち着いて読み解けばどうって事はない内容になっています。
Endモードの上下左右
End(xlUp) | Endモードで上に上がるものです。 |
End(xlDown) | Endモードで下に下がるものです。 |
End(xlToLeft) | Endモードで左に行くものです。 |
End(xlToRight) | Endモードで右に行くものです。 |
上下に行くときは純粋にUpとDownでいいのですが、左右に行くときはToが必要になりますので忘れないようにしましょう。
では、次からはこの機能を利用してFor Nextを組み立ててみましょう。