ExcelVBAにおいて、最終列を取得する方法を紹介します。
コードの仕組みは最終行を取得するときと変わりませんので、
このページはソースコードのみ記載します。
コードの解説を読みたい方は、こちらの記事をご覧ください。
ワークシートの使用範囲の最後列
シート最終列 = 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)
このように書くこともできます。
読みやすく書きやすい、関数の力が実感しやすいコードですね。
以上で最終列の取得コードの紹介を終わります。
再掲になりますが、コードの詳しい解説はこちらの記事をご覧ください。