[Excel VBA] 静的より動的に

 今回は少し休憩も含めて、VBAの勉強ではなくて、プログラミングの基本的な考え方を簡単に説明します。

静的について

 プログラム用語で静的、動的という考え方があるんだけど、これはどういうことかというと、今までのブログでも書いたけど、例えばExcelのマクロで
A列 の1~10行目のセルを黄色にするということを記録したとするよね。そのマクロはもし今後そのExcelの内容が全く変わらずに、ただ毎回1~10行目を黄色にすればいいのであればそれで十分だけど、なかなかそんな単純な処理で仕事が効率化することは無いよね。

 こんな感じであらかじめ決めておいたことしかしないのを静的と呼ぶよ。

動的について

 それに対して、今までVBAで作ってきたように、空白行になるまで行の挿入を行うっていうようにしておければ、もし行数が増えたり減ったりしても、ちゃんとその行数分、処理をしてくれるよね。これを動的と呼びます。

 つまり、何かを行うときにその条件に合わせて臨機応変に動くプログラムを動的、決められたことしかやらないのを静的と考えてくれればいいと思うよ。

 もちろん静的はプログラムというのはとても簡単で、それこそマクロの記録だけで出来るようなもののことなんだけど、どうせ作るのなら動的なプログラムにするように心がけよう。

 いくらVBAを使うようになったとしても、 例えば10行色づけをするところを、↓のように ループ処理を使うのと、ループさせないで、その10行分プログラムに書いたとしたらどうだろう。

ループ処理

    Do Until Cells(RowCounter, 1) = ""
        Cells(RowCounter, 2).Interior.ColorIndex = 45
    Loop

10行分記述

        Cells(1, 2).Interior.ColorIndex = 45
        Cells(2, 2).Interior.ColorIndex = 45
        Cells(3, 2).Interior.ColorIndex = 45
        Cells(4, 2).Interior.ColorIndex = 45
        Cells(5, 2).Interior.ColorIndex = 45
        Cells(6, 2).Interior.ColorIndex = 45
        Cells(7, 2).Interior.ColorIndex = 45
        Cells(8, 2).Interior.ColorIndex = 45
        Cells(9, 2).Interior.ColorIndex = 45
        Cells(10, 2).Interior.ColorIndex = 45

結果としては同じものになるけど、10行分記述した方がすごく見づらいし、書くのも大変だよね。

これは極端な例だけど、VBAを始めたばかりの人は、とにかくプログラムで何とかしようとするあまり、こんなふうにコピペで無理やり作ろうとして、結果として余計に手間がかかるようになってしまうというようなこともあるから、なるべく動的に作るということを意識するようにしよう!

ボクもたまにこんな感じにしちゃうときもあるけど、大抵あとで後悔することになるから気をつけようね。

 今までVBAでプログラムを作ってから、実行するときは、緑のボタンかF5キーで実行したと思うけど、もし実際にExcelを開いてそれを実行す...