和風スパゲティのレシピ

日本語でコーディングするExcelVBA

分岐・ループ構文

新着順 人気順

すべてのシートに同じ処理を行う - For~Nextステートメント

ブック内のすべてのシートをループして、複数のシートに同じ処理を実行するコードを紹介します。たくさんのシートに同じ処理を行うのは、マクロならではの便利な技です。いくつかパターンを用意しましたので、お好きなコードをお持ち帰りください。

複数のOR条件分岐を簡潔に書く方法5選

複数のOR条件分岐を簡潔に書く方法を解説します。IF/ORステートメント、Select Case ステートメント、Functionプロシージャ、カンマ区切りテキスト&Instr関数、Dictionary(連想配列)を紹介しますのでお好みで使い分けて下さい。

Do While と Do Until の違い

繰り返し処理を行うためのステートメント、Do While文と、Do Until文の違いを解説します。「条件を満たす間続ける」のがDo While文「条件を満たしたら終わる」のがDo Until文です。使い分けですが、そもそもどちらも使わなくていい気がします。

すべての図形(Shape)に同じ処理を行う - Shapes

すべての図形(Shape)に同じ処理を行う方法を解説します。WorksheetオブジェクトのShapesプロパティでシート上の図形を取得し、For Eachステートメントで順番に処理します。

For Each ○ In Range はセルごとのループとは限らない

落ちると抜け出せなくなるVBAの落とし穴です。For EachでRangeオブジェクトをループしたとき、全セルが処理されない。Rangeオブジェクト.Countがセルの数を返さない。あたりにお悩みの方は、この落とし穴に落ちていないかご確認ください。

ブック内のすべての図形(Shape)を取得/処理する

ブック内にあるすべての図形を取得/処理する方法を解説します。WorkbookオブジェクトにはShapesプロパティがありませんので、すべてのシートをFor Eachで回し、Worksheet.Shapesで取得します。

繰り返し(ループ)処理 - Do Loop

繰り返し(ループ)処理を行う方法を解説します。条件を満たすまで処理を繰り返すには、 Do Loopステートメントを使用します。 基本構文 Do Loop文 Exit Do使用 While使用 Until使用 サンプルコード Exit Do使用版 While使用版 Until使用版 For使用版 利用例 W…

条件を満たす間繰り返し(ループ)処理 - Do While

条件を満たす間繰り返し(ループ)処理を行うにはDo While ~ Loopステートメント(Do While文)を使用します。主に「データに○○が登場するまで」「Dir関数が""を返すまで」のようなループに使用します。

条件を満たすまで繰り返し(ループ)処理 - Do Until

条件を満たすまで繰り返し(ループ)処理を行うにはDo Until ~ Loopステートメント(Do Until文)を使用します。主に「データに○○が登場するまで」「Dir関数が""を返すまで」のようなループに使用します。

Do While~Loop と While~Wend の違い

条件がTrueの間処理を繰り返すループ文には、Do While~Loop文と While~Wend文の二つがあります。文法は全く同じで、Exit DoはあるけどExit Whileはないのが違いなので、常にDo Whileを使っておけばOKです。

条件がTrueの間繰り返す - While Wend

条件がTrueの間処理を繰り返すには、通常Do While文を使用します。よって別段使用する必要はありませんが、その他の方法として、While~Wendステートメントを使用することもできます。

回数を指定して繰り返し(ループ)処理 - For Next

回数を指定して繰り返し(ループ)処理を行うにはFor Nextステートメントを使用します。同じ処理を指定回数繰り返し、データを1行ずつ処理、すべてのシートに同じ処理、などのループに使用できます。

データを逆順でループする - For Step -1

データを逆順でループするには、For Nextステートメントの引数Stepに-1を指定します。これだけで逆順ループを組むことが出来ますが、初期値と最終値を逆にしてしまわないことに注意してください。

データをひとつ飛ばしでループする - For Step

データをひとつ飛ばしでループするには、For Nextステートメントの引数Stepを使用します。Stepに指定した数値だけカウンタ変数を進めてくれる上、ピッタリ最終値にならなくても止まってくれるので安心です。

データを1行ずつループする - For~Nextステートメント

データを1行ずつループして処理するにはFor~Nextステートメントを使用します。使用する際は対象シートをWorksheet変数に入れる、カウンタ変数をiではなくRや行にするなど、変数の扱いに気を付けましょう。

セルの値ごとにセルを色分けする - Select Case

セルの値ごとにセルを色分けするには条件付き書式がメジャーですが、設定の面倒さやコピー時の挙動・増殖問題、再計算の重さに悩まされることもあります。これをマクロで実装する方法を解説します。

今年の恵方を調べる関数

ある年の恵方がどの方角かを調べる関数を紹介します。恵方は実は4種類しかなく、しかも周期が10になっているため、西暦年の下1桁「Right(年,1)」を判定するだけで求めることが出来ます。

For Each文の中身を途中でいじるとどうなるか

今日はFor Eachステートメントで遊んでみようと思います。For Eachステートメントの変数を途中で変更したり、対象のCollectionを追加・削除して、それがForEachのループに影響するか試してみます。

VBA課題009「人事データからクロス表を作成」マクロ1回答コード

コミュニティ「Excel-Fun.xls*」にて毎月出題される、VBAの問題に対する私の回答ソースコードを掲載いたします。今回掲載するコードは第6回課題共有会の課題でもあった「人事データからクロス表を作成」のマクロ1です。

VBA課題005「プラモの部品構成表を作成する」回答コード

コミュニティ「Excel-Fun.xls*」にて毎月出題される、VBAの問題に対する私の回答ソースコードを掲載いたします。今回掲載するコードは第4回課題共有会の課題でもあった「プラモの部品構成表を作成する」問題です。

VBA課題001「スケジュール着色」回答コード

コミュニティ「Excel-Fun.xls*」にて毎月出題される、VBAの問題に対する私の回答ソースコードを掲載いたします。今回掲載するコードは第1回課題共有会の課題でもあった「スケジュール着色」問題です。

IfステートメントとIIf関数の速度比較

5行かかるIf~Else~EndIfの分岐を1行で済ますIIf関数はとても便利なのですが、若干遅いためそれを検証してみます。結論としては、IIfが条件がTrueでもFalse部分も計算してしまうという遅さがあるが、それを除けば実務上実感できる差は出ません。

Do While~Loop と Do~Loop While の違い

繰り返し処理を行うステートメントである、Do While~Loop文と、Do~Loop While文の違いを解説します。両者とも条件式によってループを続けるか判定しますが、While条件式 を書く位置が違います。ほぼ同じ動きなので、より有名な方を使いましょう。

Elseの中にメインコードを書かない

「If 開始条件=False Then 警告 Else メインコード Endif」と書いているマクロは、ExitSub EndIfと一旦If文を閉じることで、メインの処理をElse内に書かずに済みます。メインコードのインデントが1つ減りますし、終わった話は終わったと明示しましょう。

If文は判定回数より読みやすさを最適化すべし

コードの読みやすさと処理速度のバランスに関するお話です。テーマは「Ifの判定回数にどれだけこだわるか」です。単純な比較時間は、実はほとんど0で、別にIfは重複しても問題ありません。Else地獄に陥らないよう、読みやすさを追求していきましょう。

For文をたくさん分割しても処理は遅くならない

マクロの処理速度に関するお話です。今回のテーマは「錯覚しやすいForステートメントの処理速度」です。For R = 1 To 10000 処理A,B,C,D Nextは、For R = 1 To 10000 処理A Next × 4個に分けても、「Rに1を足す×30000回」しか処理の内容に差がありません。

OnErrorResumeNextはIfの分岐をTrueとみなす

Ifの判定部分がOn Error Resume Nextでスキップされた場合、IfステートメントはTRUE側に分岐します。実はIfステートメントはTrueなら通ってよしという処理ではなく、FalseならEndIfまでジャンプという処理なので、それがスキップされるという理屈です。