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


いつもありがとうございます!
皆さん、こんにちは。ご覧いただきありがとうございます。
“日々の業務にちょうどいい自動化を”──
業務改善アプリケーションの作成を行っている「ソフトデザイン工房」 です。
VBAで行いたい処理の代表格に「繰り返し処理」があります。
本稿では、「繰り返し処理」の方法のひとつである「Do...Until ループ」を、とても簡単な例を用いて解説します。
「Do...Until ループ」は、指定した条件が真(True)になるまで、指定した処理を繰り返すステートメントです。
この記事が、あなたのVBAマクロの価値をさらに高める一助となれば幸いです。
VBAを活用して、自分自身や身近なコミュニティに合ったアプリケーションを作成し、仕事量は半分に、成果は2倍に──そんな未来を目指すあなたを応援しています。
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"は整数を格納するためのデータ型を意味しています。
ワークブックとワークシートをオブジェクト変数として取得
' ワークブックとワークシートをオブジェクト変数として取得
Set wb = ThisWorkbook
Set ws = wb.Worksheets(1)次に、ワークブックとワークシートを、オブジェクト変数として格納しています。
wb.Worksheets(1)のカッコ内の数値1は、ワークブック内の1番目のワークシート、つまり左端のワークシートを意味しています。
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スキルアップの参考情報
近年は、ChatGPTをはじめとするAIの登場によって、学習のスタイルが大きく変わりました。
分からないことがあれば、AIに尋ねれば答えがすぐに見つかる時代です。
とはいえ、AIを使いこなすには、自分自身の基本的な知識や理解力が欠かせません。
全体像をつかむためには、やはり書籍などで体系的に学んでおくことが今でも有効です。
そのうえでAIを活用すれば、自分の理解度に合わせた的確な解説や、応用のヒントを得ることができます。
「学んで基礎を築く → AIで補い発展させる」──このサイクルを重ねることで、VBAスキルは着実に高まっていくでしょう。
VBAのスキルアップ
VBAを学び始めるなら
入門書は、どれを選んでも大きな差はないように感じます。
どれを選ぶかに悩むことに時間をかけるよりも、まずは手頃な一冊を手に取って進めてみるのがおすすめです。
もし迷ったときには、私はインプレス社の「いちばんやさしい」シリーズを選ぶことが多いです。
基礎を超えて力をつけたいなら
私は上級者を目指していましたので、入門書にとどまらず、このような内容の濃い一冊を選んで学んでいました。
今は誰でもAIを活用できる時代になりましたが、上級者を目指す方にとっては、AIをより上手に活用するという意味でも、こうした本は今なお価値があります。
このレベルの本を一冊持っておくことに、損はないでしょう。
資格で能力を証明したいなら
VBAのプログラミング能力を客観的に示したい場合には「VBAエキスパート試験」があります。
特に「スタンダード」の方は上級者向けです。
あなたが社内業務の改善を行う立場であっても、VBAで作成したシステムをお客様に納める立場であっても、この資格は信頼や安心につながるでしょう。
以下の公式テキストが販売されています。
プログラミングの一般教養
「独学プログラマー」というプログラミングの魅力を解説した書籍があります。
これはVBAではなくPythonを題材としていますが、プログラミングの基本的な知識や思考法、仕事の進め方まで幅広く学べます。
今はAIにコードを尋ねれば、答えが返ってくる時代です。
しかし、この本からは「コード」以上に、プログラミングに向き合う姿勢や考え方を学ぶことができるでしょう。
こちらの記事でも紹介しています。もしよろしければご覧ください。
【初心者歓迎】無料相談受付中

いつもありがとうございます!
限られた時間をより良く使い、日本の生産性を高めたい──
みんなの実用学を運営するソフトデザイン工房では、業務整理や業務改善アプリケーション作成のご相談を承っております。
お気軽にご相談ください。
こちらの記事でも紹介しております。
おわりに


ご覧いただきありがとうございました!
今回の記事では、「繰り返し処理」の中の「Do…Until ループ」を解説しました。
お問い合わせやご要望がございましたら、「お問い合わせ/ご要望」フォームまたはコメント欄よりお知らせください。
この記事が皆様のお役に立てれば幸いです。
なお、当サイトでは様々な情報を発信しております。よろしければトップページもあわせてご覧ください。




