コピー2018.07.31みなさんこんにちは!テラドと申します。エクセルVBAのループ処理ではFor文Do~While文Do~Until文と、3つの構文が使えます。「Do~While文・Do~Until文って、どう使い分けるんだろう」このようにループ処理の構文を使うとき、自信がない方が意外と多いのではないでしょうか。繰り返す回数が決まっている時に使います。例として4行目~10行目のセルの背景色を変えるプログラムを書いてみます。Subこのプログラムを実行すると↑セルの色が塗り変わりました。この例のように、オブジェクトの状態・変数の値などの変化する状況に左右されず、繰り返す回数が決まっている場合にFor文を使います。ExcelVBAでよくある実例を使って理解を深めましょう。次の表データを見てください。表データの3列目を走査(セルに設定されている値を順番に確認)して、地域が関東である都道府県名のセルに色をつけます。ループ処理の中に条件分岐(地域=関東の場合)がありますが、走査する範囲が決まっている場合は「繰り返す回数」が決まっているため、For文の使用が適切です。Subこのプログラムを実行すると↑地域=関東の都道府県のセルの色が塗り替わりました。表データの列を走査する範囲が決まっている場合は、For文を使うのが適切です。ループ内の処理に条件分岐があっても、For文の利用が適切かどうかは、処理する回数(=走査する範囲)が決まっているかを基準にシンプルに考えてください。データの追加がないか確認しよう都道府県の表データに新しいデータ(レコード)が追加されると最終行が変化します。この場合、繰り返し回数が決まっていないため、For文は適していません。表データを扱うプログラムでは、表データに追加があるか・ないかで使う構文が変わります。Do~While文を使うのは、どんな時?For文とDo~While文を比較してみよう繰り返す回数が決まっていない場合は、For文は適していません。この場合に使用するのがDo~While文です。実は、For文で示した4行目~10行目のセルを塗る事例と同じ処理を、Do~While文を使っても、実現することが可能です。Do~While文とFor文の違いを比較してみましょう。SubFor文との違いがわかりましたでしょうか。Do~While文の場合、変数の初期値の代入と、変数を1ずつ増やす処理を、自分で記述する必要があります。1))繰り返す回数が決まっているループ処理は、Do~While文でも実現はできます。無駄な処理はバグ(不具合)の原因になります。繰り返す回数が決まっている時は、無駄のないFor文を使いましょう。いう時にDo~While文を使うか、具体的な事例を見ていきます。継続条件が変化する場合Do~While文を使うときはFor文と違って、処理の継続条件が、オブジェクトの状態や変数の値など変化する状況の場合に使います。下の画像は、さきほどFor文の事例で示したExcelとまったく同じものです。この表の1列目が空白でない場合、2列目に100を加算するプログラムを書きます。Subこのプログラムを実行すると↑1列目が空白でないセルに、100が加算されました。セルの値が空白でない限り表データのセルの状態が処理を継続する条件になっています。その証拠に、表データを変化させて同じプログラムを実行してみましょう。↑11行目、12行目に値を追加してみました。再度、プログラムを実行すると↑追加した11行目と12行目にも値が設定されたのがわかります。(1~10行目には、すでに100が設定されていたので、値が200になります。)このように処理を継続する条件が、変化する状況の場合はDo~While文を使用します。Do~Until文を使うのは、どんな時?Do~Until文とDo~While文を比較してみようDo~Until文とDo~While文に、どういう違いがあるかわかりにくいですよね。Do~While文で示した事例を、Do~Until文で書き換えると、違いがよくわかります。Sub違いがわかりましたか?ループ処理の条件式(9行目)が、「<>」から「=」に反転していますね!逆に言うと、それ以外の違いはまったくありません。Do~While文とDo~Until文は、やっていることは同じだが、条件が反転することを、覚えてください。Do~Until文を使う場合は、Do~While文の場合の条件が反転するだけなので終了条件が変化する場合となります。書籍、他のブログでの説明ではDo~While文は条件が真のときに処理を継続するDo~Until文は条件が偽のときに処理を継続すると書かれています。Do~Until文の偽のときに処理を継続するって、直感的に理解しにくくないですか?Do~While文は「継続条件」を書くDo~Until文は「終了条件」を書くとシンプルに覚えましょう。Do~While文とDo~Until文の使い分けを、条件が反転することを踏まえて考えてみます。Sub後者のほうが「あるデータを見つけたら、処理を終了したい」という仕様にマッチし、直感的に理解しすいと思います。このようにDo~While文・Do~Until文は、やりたいことを直感的に表現できるほうを使いましょう!Do~Until文はレアキャラかも?複数人で開発をする時に、Do~Until文を使う場合は注意してください。Do~Until文があるプログラミング言語は、意外と少ないのです。私の知る限り、VB(VBA含む)・COBOL・Perlぐらいです。Do~Until文になじみがないメンバーがいるかもしれません。乱暴ですがDo~While文・Do~Until文の使いわけで判断に迷うときは、Do~While文を採用しておけば間違いないと思います。条件が反転しているだけで、やっていることに変わりはありませんから。まとめ:For文・Do~Until文・Do~While文の使い分けフローチャートエクセルVBAで使用できる、ループ処理の3つの構文について、それぞれの比較もしながら、説明してきました。ノウハウとして使いやすいように、フローチャートで整理してみました。普段のプログラミング、チームメンバに説明するとき等に、ご活用ください。フローチャートにしてしまうと、すごい簡単ですね!最後までお読みいただき、ありがとうございました!投稿者プロフィールteradoshプログラミングする福祉職システムエンジニアとして5年勤務した後、高齢者デイサービスで4年間働いた異色の経歴(学生時代は水泳コーチ)。プログラミングの経験を活かし、福祉現場の業務効率化に情熱を燃やしています!お気軽にフォローしてくださいね。「コミュニティ+講座」形式で継続性&教え合える環境も提供。!ノンプログラマーがプログラミングスキルを身に着ける支援ををするコミュニティ。セミナー・もくもく会・Facebookグループのサポートで「自らで学び続ける力をつける」支援、「教え合うことで学びの価値を上げる」場の提供をしています。関連記事Excel・VBA活用術エクセルVBAでフォルダ内のファイル一覧を表示するDir関数の使い方エクセルVBAでファイルを開く作業を自動化する方法についてお伝えしています。今回はエクセルVBAでフォルダ内のファイル一覧を出力するDir関数の使い方です。ワイルドカード一つで便利に使えます。【エクセルVBAでIE操作】ページャーをめくって複数ページからデータを取得するエクセルVBAでIEを操作する初心者向けのシリーズです。今回はページャーをめくって自動でクロールする方法とその見つけ方について解説をします。「初心者でもわかるエクセルVBAのクラスモジュール」をテーマにお送りしています。今回はエクセルVBAで、クラスモジュールにパブリック変数を宣言して、クラスに最も簡単なプロパティを追加する方法です。2018.12.19Excel・VBA活用術エクセルVBAでマクロの動作をログファイルに記録する最も簡単なプログラムExcelVBAによるマクロの動作状況をログファイルに残す方法を連載でお伝えしています。今回はFileSystemオブジェクトを使ってログファイルに書き出す最も簡単なプログラムを紹介します。請求書作成マクロを題材としてエクセルVBAでテーブルを操作する方法についてお伝えするシリーズです。今回は、テーブルのデータ行を追加して値を入力をする、Addメソッドの使い方をお伝えしていきますね。【エクセルVBA】コマンドボタンのClickイベントとUnloadステートメントでユーザーフォームを閉じる方法エクセルのユーザーフォームを作成したり、VBAで操作する方法を連載でご紹介しています。本稿では、コマンドボタンのClickイベントとDblClickイベントのご紹介と、Clickイベントでユーザーフォームを閉じる方法を説明しています。PMこんにちは、VB2.0時代から病院内の薬品・物品管理をAccessで作製していた経験が有り、このようなサイトは、とても重要だと感じております。クラウドという概念が無い15年以上前に、Webを介して同じようなシステムを作ったことが有ります。医療・福祉分野での情報化は非常に遅れています。それは利用者様・患者様にとって有りがたくない状況だとも思います。今後のご発展をお祈りしております。自分も勉強させて頂きます。PMトシさんコメントありがとうございます!そうおっしゃっていただけると、大変うれしく思います。医療・福祉分野でもITの活用が浸透していければいいですね。弊社も微力ながらも、引き続き日々情報発信をしていければと思います。引き続き、どうぞよろしくお願いいたします。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。「コミュニティ+講座」形式で継続性&教え合える環境も提供。詳細・お申込はこちら隣ITを応援する当ブログを「応援したい!」「役に立ったよ!」というお気持ちを、コチラからお支払いただくことができます。日々更新の活力倍増いたします。※PayPalアカウントが必要です。※金額は変更可能です。Platform23HTML・CSS32iPhone・アプリ29Monaca・スマホアプリ開発7PC全般・Windows86PowerPoint・VBA28Python87RPA1VBScript15Vue.js・JavaScript13WEBサービス・クラウド68WordPress・ブログ88Word・VBA42コミュニティ・イベント109セミナーのお知らせ11チャットワーク72データ分析・アクセス解析40仕事・生産性・働き方73動画配信8商業出版21起業・フリーランス72電子書籍・Kindle3運営会社プランノーツは"IT×働き方改革"をお手伝いする会社です。Scriptが「V8ランタイム」をサポート!モダンなECMAScript構文が使えるようになった2020.02.072020.02.08GASでコピーしたGoogleスライドのプレゼンテーションを取得する方法2020.02.052020.02.05Facebookページいつも隣にitのお仕事タイトルとURLをコピーしました。