こんにちは、おくやんです。
このブログでは、開発に役立つノウハウを実践的なコード例と共に紹介しています。
だけど、実装方法がわからない。。。
今回は、このようなお悩みを解決します。
本記事の内容
今回はExcel VBAで、最終行まで繰り返す処理の実装方法についてまとめました。
最終行まで繰り返す処理は、VBAでは利用頻度が高い処理の1つです。
本記事を参考に実装できるようにしましょう。
下記でサンプルプログラムも紹介していますので、本記事とあわせてチェックして下さい。
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】開発を効率化!表データを扱うクラスモジュール
ループ処理の実装だけではなく、便利な機能もたくさん使えます。
使いこなして、開発効率を大幅に向上させましょう。
最後まで読んでいただき、ありがとうございます。