【Excel VBA】最終行まで繰り返す│クラスモジュールで簡単実装!

VBA 最終行まで繰り返す|クラスモジュールで簡単実装!

こんにちは、おくやんです。

このブログでは、開発に役立つノウハウを実践的なコード例と共に紹介しています。

VBAでExcelシートの最終行まで繰り返す処理を行いたい!
だけど、実装方法がわからない。。。

今回は、このようなお悩みを解決します。

本記事の内容

最終行を取得する方法を解説
最終行まで繰り返し処理を行う方法を解説
クラスモジュールを利用した実装例を紹介

今回はExcel VBAで、最終行まで繰り返す処理の実装方法についてまとめました。

最終行まで繰り返す処理は、VBAでは利用頻度が高い処理の1つです。

本記事を参考に実装できるようにしましょう。

おくやん

下記でサンプルプログラムも紹介していますので、本記事とあわせてチェックして下さい。

【Excel VBA】クラスモジュールを利用した実装例① ~表データを扱うクラスモジュール~

VBAで最終行まで繰り返し処理を行う方法

はじめに一般的な方法で、最終行まで繰り返し処理を行う方法を解説します。

下記の表から、指定された種類の合計金額を計算する処理を実装してみましょう。

計算対象表

コードは下記となります。

Sub main()
  ' 計算対象種類を取得
  Dim kind As String: kind = ActiveSheet.Cells(2, 7)

  ' 最終行を取得
  Dim lastRow As Long: lastRow = ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row
  
  ' データの先頭行~最終行までループ
  Dim i As Long
  Dim sum As Long
  For i = 2 To lastRow
    
    ' 計算対象の種別の場合は合計に加算
    If ActiveSheet.Cells(i, 2) = kind Then sum = sum + ActiveSheet.Cells(i, 4)
  Next
  
  MsgBox kind & "の合計金額: " & sum & "円"
End Sub

ポイントを解説します。

最終行を取得する

はじめに最終行の取得を行います。

ActiveSheet.Cells(ActiveSheet.Rows.Count, 1).End(xlUp).Row

最終行の探し方は以下となります。

 最終行の探し方

① シートの最下行に移動
② 上に移動していき、値が設定されているセルを見つける
最終行の探し方
最終行の探し方

この方法では途中に空行が入っていても、最終行を見つけることができます。

最終行まで繰り返し処理を行う

最終行が取得できたら、次は最終行までのループ方法です。

先頭行から、取得した最終行までFor文でループします。

For i = 2 To lastRow
  
  ' 計算対象の種別の場合は合計に加算
  If ActiveSheet.Cells(i, 2) = kind Then sum = sum + ActiveSheet.Cells(i, 4)
Next

データの開始行からループを始めましょう。

今回は1行目にヘッダーがあるため、2行目からループを開始します。

続いては、同じ処理をクラスモジュールを利用した実装です。

クラスモジュールを利用した実装例を紹介

クラスモジュールを利用した実装例を紹介

今回は下記ページで紹介している、表形式のデータを扱うクラスモジュールを利用して実装します。

>> 【Excel VBA】開発を効率化!表データを扱うクラスモジュール

表データを扱うExcelでは、最終行まで繰り返す処理を実装する機会が多いです。

クラスモジュールを利用して、実装する手間を省きましょう。

同じ機能をクラスモジュールを利用すると以下になります。

Sub main()
  ' 計算対象種類を取得
  Dim kind As String: kind = ActiveSheet.Cells(2, 7)

  ' 表データを扱うクラスモジュールのインスタンスを生成
  Dim libWs As LibWorkSheet: Set libWs = New LibWorkSheet
  libWs.Init "家計簿"
  
  ' 最終行までループ
  Dim sum As Long
  Do Until libWs.Eof
    
    ' 計算対象の種別の場合は合計に加算
    If libWs.Val("種類") = kind Then sum = sum + libWs.Val("金額")
      
    ' 次の行読み込み
    libWs.ReadNext
  Loop
  
  MsgBox kind & "の合計金額: " & sum & "円"
End Sub

初期化処理

はじめに初期化処理を行い、表の位置を指定します。

' 表データを扱うクラスモジュールのインスタンスを生成
Dim libWs As LibWorkSheet: Set libWs = New LibWorkSheet
libWs.Init "家計簿"

今回は家計簿シートのA1セルから始まる表を読み取っています。

読み取り位置の管理

クラスモジュールの内部で読み取り位置を自動で管理してくれます。

デフォルトでヘッダーの次の行から読み取りを開始し、ReadNext関数で読み取り位置を次の行に移動します。

' 次の行読み込み
libWs.ReadNext

セル値の読み取りはVal関数で行います。

読み取る列はヘッダー名、列番号、アルファベット指定が可能です。

' 計算対象の種別の場合は合計に加算
If libWs.Val("種類") = kind Then sum = sum + libWs.Val("金額")

ループ終了の判断

ループの終了判断はEof関数で行うことが可能です。

読み取り位置と表の最終行を比較し、終了判断を自動で行います。

Do Until libWs.Eof
  ' ・・・
Loop

コードを書く側は関数を呼び出せばよいだけなので非常に簡単です。

まとめ: VBAで最終行まで繰り返す処理を簡単に実装しよう

まとめ: 繰り返し処理を簡単に実装しよう

今回は最終行まで繰り返す処理の実装方法について解説しました。

Excel VBAを使っていると必ず利用する処理の1つとなります。

実装方法を理解し、確実に使いこなせるようにしましょう。

また、下記のクラスモジュールを利用すると簡単に実装することが可能です。

>> 【Excel VBA】開発を効率化!表データを扱うクラスモジュール

ループ処理の実装だけではなく、便利な機能もたくさん使えます。

使いこなして、開発効率を大幅に向上させましょう。

最後まで読んでいただき、ありがとうございます。


最終行まで繰り返す|クラスモジュールで簡単実装!
最新情報をチェックしよう!