VBA開発

ExcelVBAマクロ-他ブック他シートの「最終行」「最終列」取得処理をパーツ化する

パーツ化とは

ExcelVBAマクロ初級者からの脱却が、処理のパーツ化(プロシージャの分割)と考えています。
マクロを作る上で基本機能をパーツ化する事で、開発時間の削減に繋がります。

分かりやすく説明すると、エクセルの「関数」と同様です。
SUM関数であれば セル内に「=SUM(1+2+3)」と記載すれば、セルには「6」と表示されますよね。
値を渡せば正しい値で返ってくる動きです。

このコードをコピペでOK

'■最終行を求めるサブプロシージャ(ブック指定版)
Public Function Call_LastRowWs(ByVal sCol As Long, ByRef ws As Worksheet) As Long
    Call_LastRowWs = ws.Cells(ws.Rows.Count, sCol).End(xlUp).Row
End Function
'■最終列を求めるサブプロシージャ(ブック指定版)
Public Function Call_LastColWs(ByVal sRow As Long, ByRef ws As Worksheet) As Long
    Call_LastColWs = ws.Cells(sRow, ws.Columns.Count).End(xlToLeft).Column
End Function

上記は他ブックや他シートを指定して最終行や最終列を取得します。
ActiveSheetsの最終行、最終列を取得する場合は下記を参照してください。

使い方

上記をお好きなモジュール内にコピペしてください。
実際に使用する時は以下のような形で使用してください。

Dim n As Long
Dim ws As Worksheet

Set ws = ThisWorkbook.Worksheets("Sheet1")

n = Call_LastColWs(2, ws)

結果イメージ

仮に他ブックもしくは他シートの最終行が1行目までデータがなければ、n=0となります。

注意点

上記が100%正解ではありませんが、求める結果がすぐにそのまま使用できます。
おいおい、マクロに慣れたら動きを理解してください。

エクセルマクロで一番多い処理は、最終行や最終列の取得だと考えています。
また、エクセルマクロ特有のActiveSheetsという概念。これが厄介で、VBAの学びはじめは、ActiveSheetsの画面上で動かすものだと理解してしまう方も多いと思います。

これで他ブックや他シートの最終列を取得する事でレベルアップのお助けになれば幸いです。

コメント

タイトルとURLをコピーしました