意外に知らないExcel VBAで最終行・最終列を取得するもうひとつの方法

VBAで最終行、列を取得するのタイトル画像

今回はExcel VBAで最終行と最終列を取得する方法をやっていくよ!
今回は一般的に紹介されている方法とは別の方法なんだね!
目次目次[閉じる]

今回は以下のようなデータをサンプルとして用意しました。

今回使うデータのイメージ

ある架空のアパレルショップの売り上げデータです。 このExcelファイルの最終行と最終列を取得していきます。

オーソドックスな取得方法

私がよくお世話になっている「Excelの神髄」さんでも取り上げていますが、

通常はCells(Rows.Count, 1).End(xlUp).RowCells(1, Columns.Count).End(xlToLeft).Column

をそれぞれ使って最終行・列を取得するかと思います。

今回は、この方法を使わずに短いコードで最終行・列を取得してきます

データ配列から取得する方法

コードの紹介

Sub 最終行列取得()

Dim data As Variant
Dim 最終行
Dim 最終列

data = ThisWorkbook.Sheets("データ").Range("A1").CurrentRegion

最終行 = UBound(data, 1)
最終列 = UBound(data, 2)

End Sub

上記のコードで最終行、最終列が取得できます。

今回の方法では、データを配列に入れることで最終行・最終列を取得しています

厳密に言うと、配列に格納されたデータの要素数を取得しているのですが、あまり詳細には触れないことにします。

次からコードについて詳しく説明していきます。

コードの説明

コードの中の前半部分は定義部分、後半が実際に最終行・列を取得する部分になっています。

VBAのコードのキャプチャ

後半部分を詳しく見ていきます。

まず、このコードを理解するためには「配列」という概念を理解する必要があります

配列はExcel上の値を入れておくための「箱」のようなものだと思ってください。詳細は割愛します。

今回はdataと言う名前の配列(箱)を定義してその中にデータを入れています。

では、dataという配列にどんなデータを入れているかというと、それがThisWorkbook.Sheets("データ").Range("A1").CurrentRegionの部分となります。

もう少し詳しく説明します。

ThisWorkbook.Sheets("データ").Range("A1").CurrentRegionを分割して日本語訳を加えると以下のような意味になります。

VBAコードのデータ取得部分のキャプチャ

前半部分のThisWorkbook.Sheets("データ")ではブックとシートの指定をしており、今編集しているこのブックの「データ」という名前のシートを示しています。

次の部分の.Range("A1").CurrentRegionはA1のセルを選択し、CTRL + a で全選択したときの範囲を表しています。

CTRL+Aを押した時の動作の説明

実際にやってみるとテーブル全体を選択していることがわかります。

つまり、dataという配列に売り上げデータ全体を入れていることになります。

次に、実際に最終行・列を取り出す最終行 = UBound(data, 1)最終列 = UBound(data, 2)の部分の説明です。

今、dataの中には売り上げデータが入っているので、29行×6列の要素が存在していることになります。

Ubound(配列名)を使うと配列の要素数を取り出すことができます。

VBAコード「Ubound」の説明

上記のイメージのようにUbound(data,1)で行方向の要素数、

Ubound(data,2)で列方向の要素数を取り出すことができます。

つまり今回の場合は

  • Ubound(data,1) → 29
  • Ubound(data,2) → 6

となります。

以上、いかがでしたでしょうか?

今回は配列を使って最終行、最終列を取得する方法をご紹介しました。

配列は最終行や最終列を取得する以外にもたくさんの用途があります。

本記事だけでなく、他の記事でも配列の活用方法をご紹介しますので、ぜひ配列を活用をお試しいただければと思います。

それではお疲れ様でした。