10日で習得!VBA入門⑥繰り返し処理と最終行数取得

VBA入門
スポンサーリンク

みなさん、こんにちは。今回はExcelマクロVBA入門の6回目です。

前回は変数について紹介しました。前回の記事はこちら

今回は繰り返し処理最終行数の取得について紹介します。

学習用Excelファイルのダウンロードはこちらから↓

マクロVBA入門講座|情報サービス鳥取
「ブログ記事とオリジナル無料教材を使ってマクロVBAの基礎を学ぼう!!」ということで、ブログにてVBA基礎の習得を目指した記事をアップしていきます。最終目標は”私がVBA習得のきっかけとなった”YouTubeチャンネル:Mr.ラビットのにょきにょきパソコン講座にて題材となってパズルを作成することです!!このパズルを理解...
スポンサーリンク
スポンサーリンク

繰り返し処理とは

Excelでのデータ処理において、繰り返し処理を行う場面はたくさんあると思います。例えば・・

  • 1000行分のデータがあり、1行ずつ合計を出していく。
  • 1000行分のデータがあり、ある数値が条件を満たしているかすべて確認する。
  • 全シートの特定のセルのデータを集計する。
  • 全ブックの特定のシートの特定のセルを集計する。

もちろん、これらの処理は関数を使っても可能ですが、日々更新されていくデータであれば(例えば、日々行数が増えていく、シートが増えていくなど)増えた行数分だけ手動で関数をコピーして対応していくと思います。

それらを全て自動化できるということです。

ここまでの記事と、更にこの記事を読んでいただければ、そういった自動化を自分自身で行うことが可能になります。

スポンサーリンク

For~Nextステートメント

For~Nextステートメントは、指定した回数だけ操作を繰り返すことができます。

開始値終了値を指定します。Nextで変数に1が加算されます。

For~Nextステートメント(例)

下記のコードでメッセージボックスに1~5までを表示します。

Dim i As Long '変数iをを宣言します。
For i = 1 To 5 '変数iに開始値「1」と終了値「5」を設定します。
MsgBox i & "回" '変数iに1が入ります。
Next i     'Nextで変数に1が加算されます。
※変数iが5になるまで「For~Next」がループします。
Sub 繰り返し例題()
    Dim i As Long
    For i = 1 To 5
        MsgBox i & "回"
    Next i
End Sub
スポンサーリンク

DoUntil~Loopステートメント

Do Until~Loopステートメントは指定した条件を満たすまで操作を繰り返します。

先程のFor~Nextステートメントは開始値と終了値が決まっていました。

Do Until~Loopステートメントは、繰り返す回数が決まっていない処理で、その代わりに条件を満たすまで操作を繰り返します。

Do Until~Loopステートメント(例)

下記のコードでメッセージボックスに1~5までを表示します。

Dim i As Long '変数iをを宣言します。
    i = 1   '変数iに1を代入
    Do Until i = 6 '変数iが6になるまで繰り返す
        MsgBox i & "回" 'メッセージボックスを表示
        i = i + 1 '変数iに1を加算
    Loop
Sub 繰り返し例題_2()
    Dim i As Long
    i = 1
    Do Until i = 6
        MsgBox i & "回"
        i = i + 1
    Loop
End Sub

i = i+1

i=i+1は、変数を加算する時に使われる定番の計算式です。

iに1を加算して、また更に先ほど加算されたiに1が加算されて・・・と雪だるま式に変数iが加算されていく式です。

スポンサーリンク

DoWhile~Loopステートメント

Do While~Loopステートメントは指定した条件を満たす間は操作を繰り返します。

先程のDo Until~Loopステートメントは指定した条件を満たすまででした。

Do While~Loopステートメントは、繰り返す回数が決まっていない処理で、その代わりに条件を満たす間は操作を繰り返します。

Do While~Loopステートメント(例)

下記のコードでメッセージボックスに1~5までを表示します。

Dim i As Long '変数iを宣言します。
    i = 1     '変数iに1を代入 
    Do While i < 6 '変数iが6未満の間は繰り返す
         MsgBox i & "回" 'メッセージボックスを表示
        i = i + 1    '変数iに1を加算
    Loop
Sub 繰り返し例題_3()
    Dim i As Long
    i = 1
    Do While i < 6
         MsgBox i & "回"
        i = i + 1
    Loop
End Sub
スポンサーリンク
スポンサーリンク

演習1

レジュメ:「9.演習」シート使用

それぞれの表の合計フィールド(黄色の塗りつぶし部分)に「数量×単価」の値を入れていきます。

9-1はForNextステートメント、9-2はDoUntilステートメントを使います。

9-1演習問題( For Nextステートメント)

Sub 繰り返し_9_1()
    Dim i As Long
    For i = 8 To 14
        Cells(i, 6) = Cells(i, 3) * Cells(i, 5)
    Next
End Sub
Dim i As Long  '変数iを宣言
For i = 8 To 14 '変数iに開始値「8」と終了値「14」を設定します。
    Cells(i, 6) = Cells(i, 3) * Cells(i, 5) '変数iが式に入ります。
Next                  'Nextで変数に1が加算されます。

9-2演習問題( Do Untilステートメント)

Sub 繰り返し_9_2()
    Dim i As Long
    i = 8
    Do Until Cells(i, 3) = ""
        Cells(i, 13) = Cells(i, 10) * Cells(i, 12)
        i = i + 1
    Loop
End Sub
Dim i As Long  '変数iを宣言
 i = 8      '変数iに8を代入
    Do Until Cells(i, 8) = "" '「セルHのi」が空欄になるまで繰り返す
        Cells(i, 13) = Cells(i, 10) * Cells(i, 12) '変数iが式に入ります。
        i = i + 1  '変数iに1を加算
    Loop
スポンサーリンク

最終行の取得

上記の繰り返し処理については、最終行が明確に設定されています。

しかし、日々データが増えていき処理したい行が増えていく場合は、最終行が変わっていきます。

そこで最終行が何行目なのか?を探してくれるコードが必要になります。

それが下記のコードです。

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

上記コードで、Cells(Rows.Count,1)は1列目のワークシートの最終行を表しています。

つまりCells(1048576,1)です。(Excel2003なら65536です)

.End(xlUp).Rowその最終行(1048576行)からデータがある行まで上に移動した行数という意味になります。

キーボード操作であれば、ワークシートの最終行(1048576行)から「Ctrl+十字キー「↑」」でデータのあるセルに移動する操作です.Rowなのでそのアクティブセルになる行数という意味になります。

因みにセルの2列目の最終行を取得したい場合は、Cells(Rows.Count,2).End(xlUp).Rowです。

スポンサーリンク

演習2

レジュメ:「10.最終行の取得」シート使用

Sub 最終行の自動取得()
    Dim i As Long
    For i = 13 To Cells(Rows.Count, 1).End(xlUp).Row
        Cells(i, 6) = Cells(i, 3) * Cells(i, 5)
    Next
End Sub
Dim i As Long '変数iを宣言
    For i = 13 To Cells(Rows.Count, 1).End(xlUp).Row '変数iに開始値「13」と終了値「1列目の最終行の行番号」を設定します。
        Cells(i, 6) = Cells(i, 3) * Cells(i, 5) '変数iが式に入ります。
    Next
スポンサーリンク

まとめ

今回は繰り返し処理最終行の取得について紹介しました。入門講座もいよいよ終盤です!

次回はIF Thenステートメントについて、紹介します。お楽しみに!!

コメント

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