Excel VBA | Subプロシージャ(マクロ)の考え方

VBA
スポンサーリンク

分かりやすく、図と例題付きで丁寧に説明します。初心者向けに「Subプロシージャ(マクロ)の考え方」「実際に書いて動かす手順」「よくある使い方・注意点」「練習問題(解答付き)」の順で出します。コードはすぐコピーして試せます。


1. まずイメージ

  • Subプロシージャ = 処理の「箱」
  • 箱に名前を付けて(例:Sub Hello())、中にやってほしいことを書きます。
  • 他の箱(Sub)を呼び出すこともでき、呼び出された箱が終わると元の箱に戻ります。

図(処理の流れ)

[Sub A] ── call Sub B ──> [Sub B 実行] ──戻る──> [Sub A 続き]

2. 基本の書き方(すぐ動くサンプル)

Sub Hello()
    MsgBox "こんにちは、VBA!"
End Sub
VB
  • Sub Hello() で開始、End Sub で終わり。
  • MsgBox はメッセージを出す命令。実行するとポップアップが出ます。

動かし方(Excel)

  1. Alt + F11 で VBA エディタを開く。
  2. 挿入標準モジュール を選ぶ。
  3. 上のコードを貼り付け、カーソルを Hello の中に置いて F5 または 実行サブ/ユーザーフォームの実行
  4. あるいは Excel に戻って Alt + F8 でマクロ一覧から Hello を選んで実行。

3. 例:セルに値を書き込む(手で動く処理)

Sub WriteValues()
    Range("A1").Value = "りんご"
    Range("A2").Value = 100
    Range("A3").Value = Range("A2").Value * 2
End Sub
VB

説明:

  • Range("A1").Value = "りんご" は A1 セルに文字列を入れる。
  • Range("A3").Value = Range("A2").Value * 2 は A2 の数値を使って計算し A3 に入れる。

4. Sub を分ける(処理の分割) — 実践例と理由

大きな仕事を小さな仕事に分けると見やすく、再利用できる。

Sub MainProcess()
    Range("A1").Value = "開始"
    FillSampleData        ' 別の Sub を呼び出す(名前をそのまま書く)
    CalculateTotal
    Range("A10").Value = "終了"
End Sub

Sub FillSampleData()
    Range("B1").Value = 10
    Range("B2").Value = 20
    Range("B3").Value = 30
End Sub

Sub CalculateTotal()
    Dim s As Long
    s = Range("B1").Value + Range("B2").Value + Range("B3").Value
    Range("B5").Value = s
End Sub
VB

流れ:MainProcessFillSampleData(実行)→ 戻る → CalculateTotal(実行)→ 終了

メリット

  • FillSampleData は別のマクロでも使い回せる。
  • それぞれの Sub は短くて理解しやすい。

5. 引数(パラメータ)を使う Sub の紹介(少しだけ発展)

Sub ShowMessage(msg As String)
    MsgBox msg
End Sub

Sub TestCall()
    ShowMessage "これが呼び出し側から渡したメッセージです"
End Sub
VB
  • ShowMessagemsg というデータを受け取り、それを表示する箱。
  • 呼び出すときに ShowMessage "文字列" のように値を渡します。

6. よくある間違い&注意点(初心者向け)

  1. Subの外にコードを書かない
    • SubEnd Sub の外に命令を書くとエラーになります。必ずプロシージャ内に書く。
  2. 名前の重複に注意
    • 同じモジュールに同名の Sub があるとエラー。分かりやすく命名(例:FillSalesData)。
  3. セル参照ミス(範囲指定)
    • Range("A1") の綴りミスや存在しないシート参照は実行時エラー。
  4. 実行順の理解
    • Sub を呼ぶと、その Sub が全部終わってから元の Sub に戻る。途中で戻ってこない点に注意。
  5. 変数のスコープ
    • Sub 内で宣言した変数はその Sub だけ有効(別の Sub からは見えない)。必要なら引数やモジュールレベル変数を使う。

7. デバッグの基本テク

  • F8:1行ずつ実行(流れを確かめられる)
  • Debug.Print:イミディエイトウィンドウに値を出力(Debug.Print Range("A1").Value
  • ブレークポイント(行をクリック)を置くとその行で一時停止する

8. 練習問題(初心者向け・すぐ試せる)— 解答付き

練習1:A列の1〜5行に 1,2,3,4,5 を入れる Sub を作ってください。

解答

Sub FillOneToFive()
    Dim i As Integer
    For i = 1 To 5
        Range("A" & i).Value = i
    Next i
End Sub
VB

練習2:B1,B2,B3 の値の合計を B5 に出す Sub を作ってください。

解答

Sub SumB123()
    Dim s As Long
    s = Range("B1").Value + Range("B2").Value + Range("B3").Value
    Range("B5").Value = s
End Sub
VB

練習3(少し発展):ShowAndWrite(msg As String, r As String) という Sub を作り、引数 msg をメッセージで表示し、r(例:”C1″)のセルに msg を書き込むようにしてください。

解答

Sub ShowAndWrite(msg As String, r As String)
    MsgBox msg
    Range(r).Value = msg
End Sub

Sub TestShowAndWrite()
    ShowAndWrite "こんにちは", "C1"
End Sub
VB

まとめ(覚えておきたい点)

  • Sub は「処理の箱」。Sub 名前()End Sub の形で作る。
  • 大きな処理は小さな Sub に分割すると読みやすく再利用しやすい。
  • 他の Sub を呼ぶときは名前を書く/引数でデータを渡せる。
  • デバッグ(F8、Debug.Print)は必ず活用しよう。
VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました