「コードを書く順番に決まりとかはあるの?」
「プログラミングの作り方にコツとかはあるの?」
今回はこういった疑問をもつ方にたいしてプログラミングのフローチャートごとにコード記述の考え方をご紹介します。
実際にコードを記述する前にどのような流れでコードを書くかイメージをもっておきましょう。
プログラミングの重要な考え方のひとつですので、ぜひ理解しておきましょうね。

わたしの経験上、慣れないうちはこれをやっておかないと右往左往する羽目になります!
まずはコードを書く前に頭の中でプログラミングの流れのイメージを作っておきましょうね。
マクロの構成|VBAの書き方3種
コードを書いて実行される処理の流れをイメージできるようになりましょう。
以下、プログラミングの動作を図解とコード例をつかってご説明をします。
上から順番にマクロを実行|VBAの順次処理
コードが上から順番に実行されます。
操作してほしい順に書けばいいのでシンプルで理解しやすいですね。

コードにしたい内容を書き並べました。
【スタート】マクロの名前:junji 「セルA1」を選択する 選択値に「1」を代入する 「セルA2」を選択する 選択値に「2」を代入する 【ゴール】
こちらが実際のコードです。
Sub junji() Range("A1").Select Selection.Value = 1 Range("A2").Select Selection.Value = 2 End Sub
こちらが実行結果です。

条件によってマクロを実行|VBAの条件分岐処理
条件によって次の処理を分けたいときに使います。
「条件を満たせばコレ、満たさなければアレ」のような考え方です。
以下の例では、「セルA1が空白なら値を入力」「空白でなければ値を削除する」といった内容です。
「If~Then~Else」や「Select Case」といったステートメントを使ってのコード記述となりますが、こちらはのちほどご紹介します。

コードにしたい内容を書き並べました。
【スタート】マクロの名前:junji (条件分岐処理の開始)もし「セルA1」が空白ならば 「セルA1」に「テスト」を代入する そうでなければ 「セルA1」を消去する (条件分岐処理の終了) 【ゴール】
こちらが実際のコードです。
Sub jouken() If Range("A1") = "" Then Range("A1").Value = "テスト" Else Range("A1").Clear End If End Sub
「セルA1」が空白の場合の実行結果です。

「セルA1」が空白でない場合の実行結果です。

条件までマクロを繰り返し実行|VBAの繰返処理
条件に達するまで繰返処理をさせたいときに使います。
以下の例では、「セルA1が10になるまで」何度も繰り返して処理をさせたいときの考え方です。
(実際こんなケースはあまりないと思いますが。。)
「For Next」や「Do~Loop」などのステートメントを使っての記述となりますが、こちらものちほどご紹介します。

コードにしたい内容を書き並べました。
前提として「セルA1」には「10未満」の整数が入っているものとします。
【スタート】マクロの名前:kurikaeshi (繰返処理の開始) 「セルA1」の値に、「セルA1」の値に「1」を加えたものを代入する (繰返処理の終了判定)「セルA1」の値が「10」になるまで繰り返し続ける 【ゴール】
こちらが実際のコードです。
Sub kurikaeshi() Do Range("A1").Value = Range("A1").Value + 1 Loop Until Range("A1") = 10 End Sub
こちらが実行結果です。
「セルA1」が「7」であった場合の途中経過を含めてお見せしていますが、通常のマクロ実行をした場合「セルA1」はすぐに「10」になります。

組合せ|条件分岐と繰返処理
それでは、さいごにご紹介した例を組み合わせてみましょう。
今回の繰返処理では、「Do ~ Loop」ではなく「For ~ Next」をつかっています。
今回実行させたい動きはこちら。
【スタート】マクロの名前:matome 変数「box」を整数型として定義する (繰返処理の開始)変数「box」に1から5までを順番に代入して繰返実行する (条件分岐処理の開始)もしセル(変数「box」,1)の値が空白ならば セル(変数「box」,1)を選択する 選択した値に変数「box」を代入する (条件分岐処理の終了) (繰返処理の終了)繰返処理の開始へ戻る 【ゴール】
これをVBAで記述するとつぎの通りです。
Sub matome() Dim box As Long For box = 1 To 5 If Cells(box, 1) = "" Then Cells(box, 1).Select Selection = box End If Next End Sub
いかがでしょうか?
ぱっと見た感じでは複雑に見えますが、ひとつずつ分解すれば意外と読み解くことができると思います。
ちなみに実行結果はこちらです。

なお、今回のコードではセルを「Range」ではなく「Cells」を使って記述しています。
「Range」と似た使い方をしますが、こういった繰り返し処理の場合では「Cells」の方が使い勝手がいいのでこちらをオススメしています。
まとめ
マクロ作成においてのコード構成の考え方をお伝えしました。
どれも大切な内容となっていますので、しっかりと考え方をマスターしておいてくださいね。
基本的にこの考え方を理解できればコードの構成を考えることができるようになります。
マクロを作るときはコードの細かい書き方を考える前に、まずは大きな動作の流れをイメージしましょう!

基本的にマクロはこういった考え方をもとに作られていますので、コードのおおきな流れをつかめるように意識してみてくださいね。