Excelマクロ、VBA

ExcelマクロとVBA入門⑬:Do Loopステートメントの使い方を解説

こんにちは、はやぶさです。

日々ExcelやPythonを使って、業務を効率化しています。

前回のExcelマクロとVBA入門シリーズでは、繰り返し処理を扱う「For Nextステートメント」に焦点を当てて解説しました。

ExcelマクロとVBA入門⑫:For Eachステートメントの使い方を解説この記事では、「For Eachステートメント」の基本から応用までを詳しく解説します。For Eachステートメントがどのようにして配列やコレクションの各要素に順に処理を適用し、それをどのように実務に応用できるかを紹介しています。さらに、For Nextステートメントとの比較を通じて、繰り返し処理の選択肢を解説します。 ...

今回の続編では、「Do Loopステートメント」を深く掘り下げ、その使い方や実践的な応用例を紹介します。

VBAにおけるプログラミングスキルをさらに向上させたい方々にとって、この記事が貴重な洞察と実用的な知識を提供し、作業のさらなる効率化に役立つことを願っています。

Do Loopステートメントとは?

Do Loopステートメントは、プログラミングで繰り返し処理を実現する基本構造です。指定した条件を満たす間(または満たすまで)指定したコードを繰り返します。

これは、For NextやFor Eachステートメントのような固定回数やコレクションの各要素への処理と異なり、より柔軟な条件下でのループを可能にします。

特に、終了条件が予測不可能なタスク、例えばファイル検索やデータベースクエリなどに適しています。

基本的な使い方

Do Loopステートメントは、繰り返し処理を実装する際に、二つの主要なパターンを提供します。

Do Whileループ

Do Whileループは、「ある条件が真(True)である間」処理を繰り返します。

このタイプのループは、条件がループの開始時にチェックされ、条件が偽(False)になるまで繰り返し実行されます。

基本構文

以下のコードでは、「整数が100未満の間」繰り返し処理されます。

Do Untilループ

Do Untilループは、「ある条件が真(True)になるまで」処理を繰り返します。

このタイプは、条件がループの終わりに評価され、真になるまで処理が繰り返される点でDo Whileループと異なります。

基本構文

以下のコードでは、「整数が100以上になるまで」繰り返し処理されます。

ループの終了後に条件をチェックするパターンも可能です。この場合、最低一回はループ内の処理が実行された後で条件が評価されます。

Do Loopループを使用する際は、ループの条件に関わる変数の値をコード内で適切に変更することが重要です。この操作を怠ると、無限ループに陥る可能性があります。

Exit Doの活用

Exit Doステートメントは、条件に応じてループを途中で終了させるために使用されます。

特定の条件が満たされた時点でループ処理を停止させることができるため、IFステートメントなどの条件分岐と共に使用することが一般的です。

実践的な例:特定のファイルを検索して開く

以下の例は、フォルダ内からファイル名に「売上実績.xlsx」を含むファイルを検索し、見つかったすべてのファイルを開き、処理実行して閉じるプログラムです。

このコードでは以下の手順で処理が行われます:

  1. Dir関数を用いて指定されたフォルダ内のファイルを一つずつ取得します。
  2. 取得したファイル名が空白になるまで、つまりフォルダ内のファイルをすべてチェックし終えるまで処理を繰り返します。
  3. Like演算子を活用して、取得したファイル名が指定したパターンに一致するかどうかを判断します。
  4. 条件に一致するファイルが見つかった場合、Workbooks.Openメソッドでそのファイルを開きます。
  5. 開いたファイルで必要な処理を行い、その後ファイルを保存せずに閉じます。

Do Loopと無限ループのリスク

Do Loopを使用すると、終了条件を動的に設定できるため、柔軟なループ処理が可能になります。

しかし、この柔軟性には注意が必要で、不適切な扱いが原因で無限ループに陥ることがあります。

無限ループを回避するポイント

  • 終了条件の明確化: 終了条件は明確に設定してください。不明瞭な条件や、ループによって変化しない条件では、プログラムが無限ループに入る可能性があります。
  • 変数の適切な更新: ループ終了に影響を与える変数は、ループ内で適切に更新してください。変数の更新がない場合、無限ループの原因となります。

以下のコードは、無限ループの例です。変数にInteger型を指定することで、すぐにオーバーフローエラーにより停止します。

この例では、整数が99を超えると102になり、100には決して達しないため、無限に実行されます。

無限ループを実行してしまった場合、ESCキーで停止させるか、最悪の場合プロセスを終了させることが必要です。この状況では、作成中のプログラムが保存できなくなるリスクもあるため、無限ループの発生には特に注意が必要です。

このようなケースを避けるためには、ループの進行や終了条件を慎重に設計します。

このコードでは、整数が100を超えるとループから抜けます。これにより、無限ループを回避できます。

まとめ

この記事では、Do Loopステートメントについて、基本から応用までを詳しく説明し、使用方法と例を紹介しました。

Do Loopステートメントは、特定の条件を満たす間、または満たすまで指定したコードを繰り返すことで、繰り返し処理を実現します。

この機能は、終了条件が不確定なタスク、例えばファイル検索やデータベースクエリの処理に適しています。

キーポイント

  • 基本的な使い方:
    • Do Whileループ: 「ある条件が真(True)である間」処理を繰り返します。
    • Do Untilループ: 「ある条件が真(True)になるまで」処理を繰り返します。
  • Exit Doの活用: 条件に応じてループを途中で終了させるために使用されます。
  • 無限ループのリスク: 無限ループに陥ると、プログラムが停止できず、作成中のプログラムが失われる可能性があります。

プログラミングは学習と実践の繰り返しです。諦めずに継続することで、やがては複雑な問題も解決できるようになります。

この記事が、Excel VBAの世界への興味をさらに深め、日々の作業を効率化するためのツールとしてExcelマクロとVBAを活用する一助となることを願っています。

はやぶさ
中小企業の中間管理職をしており、ExcelマクロやPythonを活用して業務の自動化に取り組んでいます。

今働いている職場を、ITの力でより良い環境にできるよう、知識や経験を共有していきたいと考えています。