【簡単エクセル/Excel VBA マクロ】データの最終行を取得する方法|End|ワンポイントテクニック #002



いつもありがとうございます!
ノンプログラマー向け「Excel VBA マクロ ワンポイントテクニック解説シリーズ」へようこそ。
本稿では、「データの最終行を取得する方法」を解説いたします。
データの最終行を取得することは、VBAでマクロを作成する際に頻繁に必要となる基本的な操作です。グラフを作成する際や、データに対して何らかの操作を加える際には、必ずデータ範囲を指定する必要があります。つまり、最終行を取得することが欠かせません。
最終行があらかじめ決まっている場合には、固定値で指定することも可能です。しかし、データが更新された際に対応できず、柔軟性に欠けたコードとなってしまいます。
そのため、どのようなマクロを作成する場合でも、データの最終行を動的に取得する方法を取り入れることが推奨されます。
VBAでデータの最終行を取得する方法

以下のようなデータシートを例に解説します。このシートのデータの最終行を取得してみましょう。このシートの最終行は見ての通り「12」ですので、12を取得することが出来れば成功です。

データの最終行を取得するコードと、このコードの実行結果を以下に示します。
Sub GetLastRow()
' 変数の宣言
Dim wb As Workbook ' ワークブックオブジェクトを格納する変数
Dim ws As Worksheet ' ワークシートオブジェクトを格納する変数
Dim last_row As Long ' 最終行の行番号を格納する変数
' ワークブックオブジェクトとワークシートオブジェクトを、それぞれ変数 wb、ws に格納
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
' A列の最終行を取得
last_row = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
' メッセージの表示
MsgBox last_row, vbInformation
End Sub


解説していきます!
' 変数の宣言
Dim wb As Workbook ' ワークブックオブジェクトを格納する変数
Dim ws As Worksheet ' ワークシートオブジェクトを格納する変数
Dim last_row As Long ' 最終行の行番号を格納する変数
ここでは、使用する変数の宣言をしています。Dim 変数 As データ型
の構文で宣言します。これにより、各変数はAs
以降で指定したデータ型のデータを保持できるようになります。
なお、各データ型の意味は下表の通りです。
データ型 | 種類 | 意味 |
---|---|---|
Workbook | オブジェクト型 | Excelのワークブック(ファイル)を操作するためのデータ型です。 |
Worksheet | オブジェクト型 | Excelのワークシートを操作するためのデータ型です。 |
数値型 | 数値型 | 数値を扱うデータ型です。-2,147,483,648 から 2,147,483,647 までの範囲の整数を格納できます。 |
' ワークブックオブジェクトとワークシートオブジェクトを、それぞれ変数 wb、ws に格納
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)
ここでは、各オブジェクトを変数に格納しています。
Set wb = ThisWorkbook
は、オブジェクトThisWorkbook
(現在のブック)を、変数wb
に格納しています。ThisWorkbook
は、自身のこと、つまりこのコードが書かれているワークブックを指します。これにより、以降の処理で変数wb
を使ってワークブックを参照できるようになります。
Set ws = Worksheets(1)
は、ワークブック内の最初のシートを、変数ws
に格納しています。Worksheets(1)
はブック内の1番目のシートを指します。これにより、以降の処理で、変数ws
を使ってワークシートを参照できるようになります。
' A列の最終行を取得
last_row = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
ここで、データの最終行を取得しています。このコードではA列(列番号1)の最終行を取得しています。
ws.Cells(ws.Rows.Count, 1)
のws.Rows.Count
は、ワークシートの最終行の行番号を取得します。Excelのバージョンによって異なりますが、通常1048576行です。

ws.Cells(ws.Rows.Count, 1)
の「1」は、列番号を表します。この場合は1列目、つまりA列です。
.End(xlUp)
は、Range
オブジェクトのプロパティで、指定したセル(ここではA列の最終行)から上方向に移動し、最初にデータが入力されているセルに移動する働きをします。
.Row
もRange
オブジェクトのプロパティで、取得したセルが属している行番号を返します。つまり、ここでは「12」を返します。
そして、この行番号を変数last_row
に格納しています。
' メッセージの表示
MsgBox last_row, vbInformation
ここでは、メッセージボックスに変数 last_row
に代入された行番号を表示しています。vbInformation
は、メッセージボックスに情報アイコン(iマーク)を表示するための定数です。

以上で解説は終了です。ありがとうございました!
VBAプログラミングスキルアップのための参考情報
ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。
VBAプログラミングのスキルアップ
学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。
入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。
甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
\チェックしてみよう/
\チェックしてみよう/
\チェックしてみよう/
VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
こちらの記事でも紹介しております。もしよろしければご覧ください。

【初心者歓迎】【無料相談受付中】業務支援アプリケーション作成のご相談を承ります

いつもありがとうございます!
限られた時間をより良く使い、日本の生産性を高めたい──
この取り組みが、社会全体の課題を解決する一歩になると信じています。
みんなの実用学を運営するソフトデザイン工房では、業務設計と業務支援アプリケーション作成のご相談を承っております。
初心者歓迎。無料相談受付中。気になる方は、お気軽にご相談ください。
こちらの記事でも紹介しておりますので、もしよろしければ、ご覧ください。
おわりに


ご覧いただきありがとうございました!
今回の記事では、セルの基本操作のうち、「データの最終行を取得する方法」を解説いたしました。
お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。
皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。
なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。