和風スパゲティのレシピ

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

分岐・ループ構文

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

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

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部分も計算してしまうという遅さがあるが、それを除けば実務上実感できる差は出ません。

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

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

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

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

Do While と Do Until の違い

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

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

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

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

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

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までジャンプという処理なので、それがスキップされるという理屈です。