【簡単エクセル/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スキルアップの参考情報
近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。
分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。
とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。
全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。
そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。
「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。
VBAのスキルアップ
VBAを学び始めるなら
入門書は、どれを選んでも大きな差はないように感じます。
どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。
もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
基礎を超えて力をつけたいなら
私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。
今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。
このレベルの本を一冊持っておくことに、損はないでしょう。
資格で能力を証明したいなら
VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。
特に「スタンダード」の方は上級者向けです。
あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。
以下の公式テキストが販売されています。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。
これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
今はAIにコードを尋ねれば、答えが返ってくる時代です。
しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。
こちらの記事でも紹介しています。もしよろしければご覧ください。
【初心者歓迎】無料相談受付中

いつもありがとうございます!
限られた時間をより良く使い、日本の生産性を高めたい──
みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。
お気軽にご相談ください。
こちらの記事でも紹介しております。
おわりに


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





