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

アフィリエイト広告を利用しています。
QRコード
【QRコード】PC<-->スマホの切り替えにご利用ください
アイキャッチ画像
運営者・ポテ

いつもありがとうございます!

ノンプログラマー向け「Excel VBA マクロ ワンポイントテクニック解説シリーズ」へようこそ。

本稿では、「データの最終行を取得する方法」を解説いたします。

Information
  • ノンプログラマー
    プログラミングを専門にしていない人たちのことです。
  • VBAとマクロの違い
    VBAは、Visusal Basic for Application の略で、プログラミング言語のことです。マクロは、VBAを使って作成される「機能」のことです。

データの最終行を取得することは、VBAでマクロを作成する際に頻繁に必要となる基本的な操作です。グラフを作成する際や、データに対して何らかの操作を加える際には、必ずデータ範囲を指定する必要があります。つまり、最終行を取得することが欠かせません。

最終行があらかじめ決まっている場合には、固定値で指定することも可能です。しかし、データが更新された際に対応できず、柔軟性に欠けたコードとなってしまいます。

そのため、どのようなマクロを作成する場合でも、データの最終行を動的に取得する方法を取り入れることが推奨されます

Information

動的
状況や条件に応じて自動的に変化・対応することです。

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以降で指定したデータ型のデータを保持できるようになります。

Information
  • 変数
    「値」や「オブジェクト」を入れておく箱のようなものです。変数はその名の通りコード内での指示によって、格納する値やオブジェクトを変えることができます。
  • 構文
    プログラミング言語の文法のことです。

なお、各データ型の意味は下表の通りです。

データ型 種類 意味
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列の最終行)から上方向に移動し、最初にデータが入力されているセルに移動する働きをします。

Information
  • Rangeオブジェクト
    Excelのセルやセル範囲を表すもので、データを取得したり、操作したりするために使用されます。
  • プロパティ
    オブジェクトの属性のことです。オブジェクトの状態を制御したり、情報を取得したりするために使用されます。

.RowRangeオブジェクトのプロパティで、取得したセルが属している行番号を返します。つまり、ここでは「12」を返します。

そして、この行番号を変数last_rowに格納しています。

    ' メッセージの表示
    MsgBox last_row, vbInformation

ここでは、メッセージボックスに変数 last_row に代入された行番号を表示しています。vbInformation は、メッセージボックスに情報アイコン(iマーク)を表示するための定数です。

運営者・ポテ

以上で解説は終了です。ありがとうございました!

関連記事

本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。

VBAプログラミングスキルアップのための参考情報

ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。

VBAプログラミングのスキルアップ

学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。



入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。

甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

\チェックしてみよう/

\チェックしてみよう/

\チェックしてみよう/


VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。


こちらの記事でも紹介しております。もしよろしければご覧ください。

QRコード
【QRコード】PC<-->スマホの切り替えにご利用ください

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

今回の記事では、セルの基本操作のうち、「データの最終行を取得する方法」を解説いたしました。

お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。

皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。

なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。

この記事を書いた人

運営者・ポテ
■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です