実務で使える

表の最下段、最右列を取得する方法

このページでわかること

表の最下段、最右列を取得する方法がわかります。

覚えること

  1. 最下段:ActiveSheet.Cells(Rows.Count, “A”).End(xlUp).Row
  2. 最右列:ActiveSheet.Cells(1, Columns.Count).End(xlToLeft).Column
  3. テーブルの最下段の取り方
  4. テーブルの最右行の取り方

こんにちは、hokkyokunです。
最下段、最右列の取り方です。
今日はどちらかというと簡単な内容です。でもとてもとても重要な手法です。

私は最下段の取得方法を最初の最初に習いました。
以後、最も多く使っているといってもいいくらい書きまくっています。
ただ、これだけだとつまらないので、テーブルの最下段も取得してみます。

最下段の取り方

結論から言うと

シート名.Cells(Rows.Count, "A").End(xlup).Row

最初に見たときなんだこの呪文はと思いました。
でも、一つ一つ見ると全然難しくないです。

Cells(Rows.Count, “A”) がちょっとやな感じですが、
Rows.Countはシートに行がいくつあるか、最大数を聞いています。
イコールそのシートの一番下の行となります。
つまり Cells(Rows.Count, “A”) は一番下の行のA列のセルを表します。

End(xlup) は
一番下の行のA列のセル {Cells(Rows.Count, “A”) のことです。}から
上に上がって値が入っている最初のセルを指します。

最後のRowで行を取得します。

最右列の取り方

同じ考えです。

 シート名.Cells(1, Columns.Count).End(xlToLeft).Column 

今度は Columns.Count で列の最大数を聞いているので、
Cells(1, Columns.Count) は一行目の一番右の列のセルを指します。

End(xlToLeft) で今度は左に行って最初に値の入ったセルを指定します。

Column で列数をとります。

テーブルの最下段の取り方

ちょっとお遊び的ですが、
テーブルの最下段をとってみます。

テーブルは基本的にA1から始める方が都合がいいですが、
事情によりそうもいかないこともあると思います。

ここではどこにテーブルを置いても、
フィルタリングをかけても
正しく行を取得できる方法をご紹介します。

このようにA2から始めるテーブルを作ったとします。

Sub 最下段の行()
'テーブルの宣言
Dim table As ListObject
Set table = ActiveSheet.ListObjects(1)

'テーブルのヘッダーの行を取得
Dim HeaderRow As Long
HeaderRow = table.HeaderRowRange.Row

'テーブルのデータ数(レコード数)を取得
Dim listRowsCnt As Long
listRowsCnt = table.ListRows.Count

'最下段はヘッダーの行数プラスデータ数(レコード数)
Dim maxRow As Long
    maxRow = HeaderRow + listRowsCnt

MsgBox ("最下段は" & maxRow)

End Sub

テーブルの位置を動かしても、フィルタリングしても全然大丈夫です。

テーブルの最右列

今度はテーブルの右端の列をとっていきます。
下記のようなテーブルを想定します。
くどいようですが、テーブルはA1から始めることをお勧めします笑

Sub 最右行の列()
'テーブルの宣言
Dim table As ListObject
Set table = ActiveSheet.ListObjects(1)

'テーブルの最初の列数を取得
Dim col1st As Long
col1st = table.HeaderRowRange(1).Column

'テーブルの列数を取得
Dim colCnt As Long
colCnt = table.ListColumns.Count

'テーブルのデータ数(レコード数)を取得
Dim listRowsCnt As Long
listRowsCnt = table.ListRows.Count

'最下段はヘッダーの行数プラスデータ数(レコード数)
Dim maxCol As Long
    maxCol = col1st + colCnt - 1

MsgBox ("最右行は" & maxCol)

End Sub

実務でどう使うか?

最後に実例をご紹介します。
実務においての超あるあるです。

下のような表の一番下に
果物列にメロン
色に緑と入力する方法です。

ベタ打ちでA17とか指定してしまうと次から使いまわせないので、一番下の行をとって処理します。

Sub maxrow()

Dim maxrow As Long
maxrow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row

With ActiveSheet
    .Cells(maxrow + 1, "A").Value = "メロン"
    .Cells(maxrow + 1, "B").Value = "緑"
End With

End Sub

いかがでしょうか。
表の端っこって案外使うこと多いです。

テーブルの方は頭の体操で作ってみましたが、
A1から始めるともっとシンプルにできるので、
できればデータベースは一つのシートを使ってA1から始めてみてください。

テーブルは強力な武器です。
事務されている方はたくさんのデータを扱うことになると思いますので、
ぜひテーブルも使ってみてください。
テーブルはいつか絶対記事作ります。テーブルラブです。

ではでは