和風スパゲティのレシピ

日本語でコーディングするExcelVBA

最終列を取得する方法5選

ExcelVBAにおいて、最終列を取得する方法を紹介します。


コードの仕組みは最終行を取得するときと変わりませんので、
このページはソースコードのみ記載します。

コードの解説を読みたい方は、こちらの記事をご覧ください。

www.limecode.jp

ワークシートの使用範囲の最後列

シート最終列 = ws対象シート.UsedRange.Columns.Count + ws対象シート.UsedRange.Column - 1

まずは「シートの使用範囲の中で最終列」がこちらです。
このコードが最終列取得の一番基本のコードです。

特定の列の入力最終行

第R行の最終列 =ws対象シート.Cells(R, ws対象シート.Columns.Count).End(xlToLeft).Column

続いてEndプロパティを利用した、「ある行の最終列」です。

「ある列の最終行」はよく出てくるのですが、
「ある行の最終列」はそんなに書く機会はないですね。

xlLeft ではなく xlToLeft であることに注意してください。

最終列を取得する汎用関数

上記の2コードを関数化したのがこちらです。

' UsedRangeを使った最終行取得関数
Function GetLastC_シート(ws As Worksheet) As Long
    GetLastC_シート = ws.UsedRange.Columns.Count + ws.UsedRange.Column - 1
End Function

' Endを使った最終行取得関数
Function GetLastC_指定行(ws As Worksheet, R As Long) As Long
    GetLastC_指定行 = ws.Cells(R, ws.Columns.Count).End(xlToLeft).Column
End Function

この関数を用意しておけば、以降の最終列取得は

LastC = GetLastC_シート(ws対象シート)

で済むようになりますのでご活用ください。

指定したセル範囲(Rangeオブジェクト)の最終行

Function GetLastC_セル範囲(セル範囲 As Range) As Long
    GetLastC_セル範囲 = セル範囲.Columns.Count + セル範囲.Column - 1
End Function

あるRangeオブジェクトの最終列を求める関数です。

この関数を作成しておくことで、オートフィルターやテーブルなど、
オブジェクトの最終列を求めるのが非常に簡単になります。

表形式データの最終行

表全体のRangeオブジェクトを取得し、そこから最終列を取得するコードがこちらです。

アクティブセル領域の最終列 = Range("B2").CurrentRegion.Columns.Count + Range("B2").CurrentRegion.Column - 1
オートフィルターの最終列 = ws対象シート.AutoFilter.Range.Columns.Count + ws対象シート.AutoFilter.Range.Column - 1

先ほどの関数を利用することで、

アクティブセル領域の最終列 = GetLastC_セル範囲(Range("B2").CurrentRegion)
オートフィルターの最終列 = GetLastC_セル範囲(ws対象シート.AutoFilter.Range)

このように書くこともできます。

読みやすく書きやすい、関数の力が実感しやすいコードですね。



以上で最終列の取得コードの紹介を終わります。


再掲になりますが、コードの詳しい解説はこちらの記事をご覧ください。

www.limecode.jp