ExcelマクロVBA再入門 | 第6回.表の先頭から最終行まで繰り返す(ForとEnd(xup).Row) | マクロが覚えられないという初心者向けに理屈抜きのやさしい解説



最終更新日:2016-03-29

第6回.表の先頭から最終行まで繰り返す(ForとEnd(xup).Row)


エクセルの表は、横の項目はあまり変更はないものですが、

縦のデータ数、つまり行数は常に変わるものです、

前回のように、固定の回数しか繰り返せないのでは困ります、

データ数に応じて、最終行まで繰り返す方法が必要です。

データの最終行が分かれば良いのです。


幸いなことに、VBAにはデータの入っている最終行を取得する方法が用意されています。

前回と同じ、以下の表を使いましょう。



この表なら、データの最終行である、
11
を取得できれば良い訳もです。
この11を取得するにはどうしたらよいでしょうか。

数十行、数百行程度なら、スクロールして最終行を目視で確認できますが、
数万行あったら、スクロールも面倒です。
そういう時は、
A列の適当なセル(A1セルで良い)を選択して、
Ctrl + ↓
とすれば、連続データの最終行に飛んでいきます。
上記の表なら、
A1セルで、
Ctrl + ↓
A10セルに選択セルが移動します。
これなら、データが何万行あっても、一瞬で最終行に移動できます。
これをマクロVBAで書くと、

Cells(1, 1).End(xlDown)

このように書きます。
ですが、A列の途中に空白セルがあると、そこで止まってしまいます。
Ctrl + ↓
を何度も押して、一番下に移動した経験がある方も多いのではないでしょうか。
つまり、上のコードでは、ちゃんとした最終行を取得できません。
また、もし1行目の項目名しかないと、
Ctrl + ↓
これでは、シートの一番下の、1048576行まで行ってしまいます。

ではどうしたら良いか・・・
シートの一番下の行から、
Ctrl + ↑
これで、データの入っている最終行で止まります。
つまり、
A1048576のセルから、
Ctrl + ↑
これで間違いなく、データの最終行に移動できます。
これをマクロVBAで書くと、

Cells(Rows.Count, 1).End(xup)

このように書きます。
Rows.Countは、
1048576
という数値と同じ意味です。
シートの一番下の行の数値、つまり、シートの全行数を取得しています。
ですので、
Cells(1048576, 1).End(xup)
これと同じことになります。

.End(xlDown)
.End(xup)
これらが、
Ctrl + ↓Ctrl + ↑
を意味します。

つまり、
A1048576のセルから ・・・ Cells(Rows.Count, 1)
Ctrl + ↑で移動したセル ・・・ .End(xup)
行数 ・・・ .Row
という事です。

これで最終行のセルは分かりました。
しかし、これはあくまで最終行のセルです。
行数ではありません。
セルの行数は、
.Row
と付け足すと、ぞのセルの行数が取得できます。
つまり、

Cells(Rows.Count, 1).End(xup).Row

このように書くと、最終行の行数になります。
最初の画像の表なら、

Cells(Rows.Count, 1).End(xup).Row
これは、
11
にまります。

つまり、
Cells(Rows.Count, 1)
これは、
A1048576セルの事で
そこから、
.End(xup)
そのセルからCtrl + ↑で移動したセルの.Row行番号という事です。

そこで、前回の繰り返し処理の

For i = 2 To 11
この終了値の
11

Cells(Rows.Count, 1).End(xup).Row
これに取り替えることで、
(デー件数が変わっても)常に最終行まで処理されるようになります。



これを変更して、



このようにすることで、常に最終行まで処理されます。
実際に、データを追加したり、削除して、
ちゃんと最終行まで計算されることを確認してください。

※文法って必要なのか・・・

上記の最終行取得のVBAコードを説明しようとすると、かなり難しい文法説明が必要になります。
VBAを書くだけなら、上記のコードをコピペすれば済むことです。

オブジェクト、プロパティ、メソッド
ここを訪れるまでに、書籍やネットでVBAを勉強したことある人は、これらの言葉で挫折した人も多いのではないでしょうか。

オブジェクトとは
対象物です。
ほとんどのオブジェクトは、マウスで操作できるもので、そのマウスで操作する対象の事です。
エクセルの代表的なオブジェクトと言えば、ブック、シート、セルという事になります。
プロパティとは
オブジェクトの属性・状態・様子といったものになります。
オブジェクトを物体としてとらえると、その物体の状態を表すという事です。
メソッドとは
オブジェクトに動作を与える命令です。
オブジェクトに対して、こう動作しろ、こうなれ、と命令するという事です
コレクションとは
同一のオブジェクトの集まりです。
多くの場合、オブジェクト名称を複数形にした名前になっています。
上記の最終行取得のコードを、これらの用語を使って説明しても簡単に理解できるものではありません。
そのような説明を聞いて理解できるなら苦労しないし、ここには来ていないはずです。
こういう事をちゃんと覚えるのは後回しにしましょう。
今の段階では、用語として、そういう言い方をすると、それだけの理解で十分です。

マクロを書くのに、このようなオブジェクト、プロパティ、メソッドが何で、どういうものかなどという事は、知らなくても書けます。
しかし、書籍やネットを見れば、このような用語が出てきますし、
エクセルも、書き間違えてエラーを起こすと、これらの言葉で注意します。
その時に、何の事かが分からないと困ってしまいます。
逆に言えば、そのような時に困らなければ、それで十分だという事です。

本当に詳しい話、本質を語れば、
そもそもオブジェクト、プロパティ、メソッドの違いなんて、ほとんど大した違いはありません。
VBAでの使い方・書き方の違い程度の事でしかないのです。

オブジェクトは、階層構造になっていて、オブジェクトの中にオブジェクトがある。
(あらゆる物体は、より小さな物体の集まりです)
オブジェクトは、プロパティとメソッドの集合体である。
(どういう物体かをプロパティが決めていて、メソッドでその物体は動かせる)
このようにイメージしてください。





同じテーマ「ExcelマクロVBA再入門」の記事

第5回.同じ計算を行数分繰り返す(For〜Next)
第7回.セルの値によって計算を変える(ステートメント)
第8回.表範囲をまとめて消去する(OffsetとClearContents)
第9回.関数という便利な道具(VBA関数)
第10回.ワークシートの関数を使う(WorksheetFunction)
第11回.分からない事はエクセルに聞く(マクロの記録)
第12回.エクセルの言葉を理解する(オブジェクト、プロパティ、メソッド)

新着記事 ・・・新着記事一覧を見る

空白セルを正しく判定する方法2|ExcelマクロVBA技術解説(5月6日)
フルパスをディレクトリ、ファイル名、拡張子に分ける|ExcelマクロVBA技術解説(4月15日)
テキストボックスの各種イベント|Excelユーザーフォーム入門(4月9日)
フォルダ(サブフォルダも全て)削除する、Optionでファイルのみ削除|ExcelマクロVBAサンプル集(4月4日)
最後の空白(や指定文字)以降の文字を取り出す|エクセル関数超技(3月26日)
先頭の数値、最後の数値を取り出す|エクセル関数超技(3月26日)
Excelファイルを開かずにシート名をチェック|ExcelマクロVBAサンプル集(3月23日)
数式の参照しているセルを取得する|ExcelマクロVBAサンプル集(3月18日)
CSVの読み込み方法(改の改)|ExcelマクロVBAサンプル集(3月17日)
変数とプロシージャーの命名について|ExcelマクロVBA技術解説(2月12日)

アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|ExcelマクロVBA入門
2.ひらがな⇔カタカナの変換|エクセル基本操作
3.RangeとCellsの使い方|ExcelマクロVBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|ExcelマクロVBA入門
5.徹底解説(VLOOKUP,MATCH,INDEX,OFFSET)|エクセル関数超技
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.セルの参照範囲を可変にする(OFFSET,COUNTA,MATCH)|エクセル関数超技
8.セルのコピー&値の貼り付け(PasteSpecial)|ExcelマクロVBA入門
9.CSVの読み込み方法|ExcelマクロVBAサンプル集
10.定数と型宣言文字(Const)|ExcelマクロVBA入門



  • >
  • >
  • >
  • 表の先頭から最終行まで繰り返す(ForとEnd(xup).Row)

  • このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。




    ↑ PAGE TOP