【簡単エクセル/Excel VBA マクロ】Do…Until ループ|繰り返し処理 #003

アフィリエイト広告を利用しています。
【QRコード】PC<--->スマホの切り替えにご利用ください
運営者・ポテ

いつもありがとうございます!

ノンプログラマー向けの「Excel VBA マクロ 解説シリーズ」へようこそ。

VBAで行いたい処理の代表格に「繰り返し処理」があります。

本稿では、「繰り返し処理」の方法のひとつである「Do...Until ループ」を、とても簡単な例を用いて解説いたします。

「Do...Until ループ」は、指定した条件が真(True)になるまで、指定した処理を繰り返すステートメントです。

Information
  • ノンプログラマー
    プログラミングを専門にしていない人たちのことです。
  • VBAとマクロの違い
    VBAは、Visusal Basic for Application の略で、プログラミング言語のことです。マクロは、VBAを使って作成される「機能」のことです。
  • ステートメント
    VBAの中で何らかの固有の働きをするものを定義したものの呼称です。VBAには、Ifステートメント、For...Next ステートメント、Withステートメント、Sub ステートメントなど、様々なステートメントがあります。例えば、Subステートメントは、コードの始まりを定義するステートメントです。

VBAにおける繰り返し処理の全体像

VBAにおける「繰り返し処理」には、大きく分けて4つの方法があります。「繰り返し処理の」の全体像は以下の記事で解説しております。

本稿では「繰り返し処理の」一部である「Do...Until ループ」を解説いたします。

VBAで「Do...Until ループ」を行う方法

Do...Until ループの基本構文を以下に示します。

Do Until 条件

    '実行するコード

Loop

この構文では、Do Until の後に指定した"条件"が真(True)になるまで、"実行するコード"が実行されます。"条件"が 偽(False)になったときにループは終了します。

具体的に簡単なコードを実装してみます。

例として、"A列を走査しセルが空白でなければ、B列に行番号を書き込む"コードを以下に示します。

Sub sample()

' 変数の宣言
Dim wb As Workbook
Dim ws As Worksheet
Dim row_idx As Long    ' 行番号変数

' ワークブックとワークシートをオブジェクト変数として取得
Set wb = ThisWorkbook
Set ws = wb.Worksheets("Sheet1")

' 行番号変数に初期値を設定
row_idx = 1

' Do...Until ループで繰り返し処理を実行

Do Until ws.Cells(row_idx, 1) = ""    ' 条件(A列のセルが空白)がTrueになるまで
    
    ' B列に行番号を書き込む
    ws.Cells(row_idx, 2) = row_idx

    ' row_idx (行番号変数)にプラス1
    row_idx = row_idx + 1

Loop

End Sub

解説します。

変数の宣言

' 変数宣言
Dim wb As Workbook      
Dim ws As Worksheet     
Dim row_idx As Long     ' 行番号変数

冒頭の部分は変数を宣言しています。

Dim 変数 As データ型 の構文で宣言します。

これによって各変数は As 以降で指定したデータ型のデータを格納することができるようになります。

なお、"Workbook"はワークブック、"Worksheet"はワークシート、"Long"は整数を格納するためのデータ型を意味しています。

Information
  • 変数
    「値」や「オブジェクト」を入れておく箱のようなものです。変数はその名の通りコード内での指示によって値やオブジェクトを変えることができます。
  • オブジェクト
    VBAで操作する対象のことです。
  • Long
    -2,147,483,648から2,147,483,647までの範囲の整数値を格納することができる。尚、整数を扱うデータ型には Integer もあるが、これは-32,768から32,767までと、Long よりも扱える数が小さい。

ワークブックとワークシートをオブジェクト変数として取得

' ワークブックとワークシートをオブジェクト変数として取得
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)

次に、ワークブックとワークシートを、オブジェクト変数として格納しています。

wb.Worksheets(1)のカッコ内の数値1は、ワークブック内の1番目のワークシート、つまり左端のワークシートを意味しています。

Information

オブジェクト変数
「オブジェクト」を入れておく箱のようなものです。通常の変数が数値や文字列などを格納するのに対して、オブジェクト変数はオブジェクトを格納します。

Do...Untilループを用いた繰り返し処理の実装

' 行番号変数に初期値を設定
row_idx = 1

' Do...Until ループで繰り返し処理を実行

Do Until ws.Cells(row_idx, 1) = ""    ' 条件(A列のセルが空白)がTrueになるまで
    
    ' B列に行番号を書き込む
    ws.Cells(row_idx, 2) = row_idx

    ' row_idx (行番号変数)にプラス1
    row_idx = row_idx + 1

Loop

次に、繰り返し処理を実行しています。

まず、row_idx = 1 で、行番号変数 row_idx に初期値を設定します。

次に、ループを開始するコード Do Until ws.Cells(row_idx, 1) = "" を記述します。これは、条件=A列のセルが空白、が真(True)になるまでずっと処理を繰り返しなさい、という命令です。

これで、Do... と Loop の間にある行の処理が繰り返し実行されます。この例では、B列に行番号を書き込み、その後、行番号変数 row_idx にプラス1をし、次の行に進める処理をしています。

この row_idx = row_idx + 1 がないと行番号が進まず無限ループ(欠陥コード)となります。このように、Do...Until 構文では、処理を次のステップに進める指示が必要になりますので、注意してください。

以上が、Do...Untilループの基本的な使い方です。

マクロ実行結果に関する補足

マクロ実行結果を見ると、繰り返し処理が、最終行ではなく4行目で終わっています。これは、5行目が空白であるため、条件 Do Until ws.Cells(row_idx, 1) = "" が真(True)になったためです。

このように条件に合致すると(この場合は空白があると)、処理がとまります。これが意図したものであれば良いですが、そうでない場合は、このようなデータ側のばらつきに対応したコードを書く必要があります。

これは応用的な内容であるため、別の記事で紹介していきます。

マクロ実行後
運営者・ポテ

ご覧いただきありがとうございました!

関連記事

本稿と関連の深い記事です。もしよろしければ、合わせてご活用ください。

VBAプログラミングスキルアップのための参考情報

ここでは参考図書を紹介いたしますが、これらに限らず自分に合うものを選ぶことが重要だと考えております。皆様の、より一層のご成功を心よりお祈りしております。

VBAプログラミングのスキルアップ

学習用としてもハンドブックとしても役立つ便利な書籍がこちらです。価格はやや高めですが、その内容は非常に充実しています。相応のスキルを身に付けるためには、こうしたしっかりとした書籍を一冊持っておくと良いでしょう。



入門書に関しては、どの書籍も大きな違いはありません。あまり迷うことに時間をかけるよりは、手頃なものを一冊選んでみると良いでしょう。VBAの入門書は数多く出版されていますので、興味がある方はぜひチェックしてみてください。

甲乙つけがたい場合、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。

\チェックしてみよう/

\チェックしてみよう/

\チェックしてみよう/


VBAのプログラミング能力を客観的に証明したい場合には「VBAエキスパート試験」があります。この試験はVBAの知識を公式に認定するものです。VBAの総合的な能力獲得を目指す方に適しています。以下の公式テキストが販売されております。



プログラミングの一般教養

「独学プログラマー」というプログラミングの魅力を解説した書籍があります。これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。


こちらの記事でも紹介しております。もしよろしければご覧ください。


【QRコード】PC<--->スマホの切り替えにご利用ください

おわりに

運営者・ポテ

ご覧いただきありがとうございました!

今回の記事では、「繰り返し処理」の中の「Do…Until ループ」を解説いたしました。

お問い合わせやご要望等ございましたら、「お問い合わせ/ご要望」またはコメントにて、ご連絡いただければ幸いでございます。

皆様の人生がより一層素晴らしいものになるよう、少しでもお役に立てれば幸いでございます。

なお、当サイトでは様々な情報を発信しております。もしよろしければ、トップページもご覧いただけると幸いでございます。

この記事を書いた人

運営者・ポテ
■人生を追求する凡人■日本一安全で、気の向くままに自分の時間を過ごせる、こだわりのキャンプ場を作るのが夢■光学・機械系エンジニア(歴20年、内マネジメント10年、特許数件権利化)/副業フリーランスエンジニア■読書・文学愛好■人生は時間そのもの。ひとりでも多くの人が「より良い人生にするために時間を使って欲しい」と願い、仕事のスキルの向上、余暇の充実、資産形成を研究。■VBAアプリ開発サービス提供中(業務委託 / VBA使用経験20年)■Python愛好(歴5年)■VBAエキスパート「Excel VBA スタンダード」(上級者向け資格)/ Python 3 エンジニア認定基礎(経済産業省「ITスキル標準(ITSS)」に掲載)

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です