最初のコードを書いてみる
音声
目次
Subプロシージャの基本構造
今回できるようになることとして、Subプロシージャ(プロシージャ=一連の処理をまとめたまとまり)の基本形を理解して、簡単なマクロを実行できるようになります。
Subプロシージャは「Sub 名前()」で始まり「End Sub」で終わる単純な構造です。複数行の命令を入れられ、コメントはシングルクオートで書きます。
貼り付け場所は標準モジュール(VBEの挿入→モジュール)に貼り付けるのが一般的です。
保存はマクロ有効ブック(拡張子 .xlsm)で行い、実行前にExcelのマクロを有効にしてください。
実行方法はVBEの実行ボタン(F5)か、Excel側でマクロを割り当てたボタン/ショートカットから実行します。
要チェックとして、保存形式やマクロ有効化の設定が済んでいないと実行できない点が苦手なポイントです。
Rangeオブジェクトでセルに値を書き込む
Rangeオブジェクト(オブジェクト=セルや範囲を表す仕組み)を使うと、A1のような文字列で特定セルにアクセスできます。
セルに値を代入する基本は Range("A1").Value = "文字列" のようになります。最小マクロ:下のサンプルはRangeで複数セルに書き込み、最後にMsgBoxで完了を知らせます。
Sub WriteWithRange()
' A1とB2に値を書き込む最小マクロ
Range("A1").Value = "こんにちは"
Range("B2").Value = 123
Range("C3").Value = Date
MsgBox "書き込みが完了しました。", vbInformation
End Sub
確認方法:Excelの該当セル(A1/B2/C3)が期待どおり変わっていること、MsgBoxが表示されることを確認します。
Cellsプロパティの使い方
Cellsプロパティ(プロパティ=オブジェクトの要素を取得する仕組み)は、行番号・列番号でセルを指定します。たとえば Cells(1,1) は Range("A1") と同じです。ループや変数で行列を動的に扱うときに便利です。下は1行目に連番を書き出す例です。
Sub WriteWithCells()
Dim i As Long
For i = 1 To 5
Cells(1, i).Value = "列" & i
Next i
End Sub
使い分けの基準として、Rangeは固定のラベル指定("A1"や"A1:B2")が直感的なため、セル範囲の指定や名前付き範囲に向きます。Cellsは行列を数値で扱うとき(ループや変数で動かす場合)に向きます。
ValueとValue2の違いは微妙ですが、Valueは書式やロケールを考慮する場合に便利で、Value2は高速かつ生データ取得に適しています。
MsgBox関数でメッセージを表示する
MsgBox関数(関数=結果を返す処理)を使うと、ユーザーへメッセージを表示したり、簡単な入力確認をしたりできます。
基本形は MsgBox "本文", ボタン定数, "タイトル" で、戻り値からユーザーの選択(vbYes/vbNoなど)を取得できます。
上の最小マクロやCellsの例でも完了通知に使いましたし、上書き確認のダイアログに使うと操作ミスを減らせます。
よくあるミスは、MsgBoxの戻り値を扱わずに分岐を書かないため、ユーザーの「いいえ」を無視して処理を続けてしまうことです。
直し方は、戻り値を変数に受け取り、Ifで分岐することです。
If MsgBox(...)=vbYes Then ...
変数の宣言(Dim)と基本的な使い方
変数はDimで宣言します。型を明示すると動作が速く安定します(例:Dim i As Long, s As String)です。Variant型は型指定を省いた場合のデフォルトですが、大量処理では避けるとよいです。
宣言のスコープは書いた場所で変わり、プロシージャ内で宣言するとローカル変数になります。次はRangeとCellsを組み合わせて変数を使う例のイメージです(コードは前節を参照)です。
変数で行列番号や書き込む値を切り替えると、同じ処理を別セルに簡単に適用できます。
注意(ここだけ)
- マクロを保存する際は必ず「Excel マクロ有効ブック (*.xlsm)」で保存し、Excel上でマクロを有効にしてから実行してください。
要約
Subプロシージャは
Sub 名前()~End Subの構造で、標準モジュールに貼り付けて実行します。Range("A1")は直接セルを指定するのに便利で、シンプルな書き込みに向きます。Cells(row, col)は数字でセルを扱うためループや動的指定に適しています。MsgBoxは通知やユーザー確認に使い、戻り値を受け取って分岐処理を行います。Dimで変数を宣言し型を明示すると処理が安定しやすく、コードの可読性と保守性が向上します。