Excel VBAプロシージャと関数設計の基本!初心者が押さえるべき重要ポイント20選
生徒
「VBAのプログラムを書き始めたのですが、『プロシージャ』とか『設計』とか言われても難しくてピンときません。何を意識すればいいですか?」
先生
「プロシージャというのは、パソコンへ出す『命令のまとまり』のことですよ。設計はその『手順の組み立て方』ですね。最初は難しく考えず、整理整頓のコツを覚えるのが近道です。」
生徒
「整理整頓ですか!それなら私にもできそうです。具体的に初心者が気をつけるべきポイントを教えてください!」
先生
「もちろんです!効率よく、ミスを減らすための20のポイントを、わかりやすく噛み砕いて解説していきますね。」
1. プロシージャの基本!SubとFunctionの違いを理解する
Excel VBAでプログラムを書くとき、まず最初に作るのが「プロシージャ」という箱です。これには大きく分けて2つの種類があります。1つは Sub(サブ)プロシージャ、もう1つは Function(ファンクション)プロシージャです。
例えるなら、 Sub は「お掃除ロボット」です。スイッチを押すと、部屋を綺麗にするという「動作」をしてくれますが、終わった後に何かを返してくれるわけではありません。一方で Function は「自動販売機」です。お金(データ)を入れると、飲み物(計算結果)を「返して」くれます。この「動作だけをするのか」「結果を返してくれるのか」という違いを使い分けるのが、設計の第一歩です。
Sub Aisatsu()
' これは動作だけをするSubプロシージャです
MsgBox "こんにちは!VBAの世界へようこそ。"
End Sub
2. 名前付けのルール!誰が見てもわかる名前をつけよう
プロシージャには自由に名前を付けることができますが、適当に a や test と名付けるのは避けましょう。後で読み返したときに、何をするためのプログラムか分からなくなってしまうからです。これを専門用語で「可読性(かどくせい)」と言います。
名前は「動詞+名詞」の形にするのがおすすめです。例えば、売上を集計するなら SyuukeiUriage、シートを削除するなら SakujyoSheet といった具合です。パソコンは日本語の名前も理解できますが、できればローマ字や英語を使って書く癖をつけると、プログラミングの世界に馴染みやすくなります。自分だけでなく、未来の自分や他の人が見ても一目で内容が伝わる名前を心がけましょう。
3. プロシージャは「短く、一つのことだけ」に絞る
一つのプロシージャの中に、あれもこれもと欲張って命令を詰め込まないようにしましょう。これを「巨大なプロシージャ」と呼び、エラーが起きたときにどこが悪いのか探すのがとても大変になります。一回の処理は、せいぜいパソコンの画面に収まるくらいの長さ(20行から30行程度)にするのが理想的です。
もし処理が長くなってしまったら、作業を小分けにして別のプロシージャに分けましょう。例えば「データを読み込む」「計算する」「結果を印刷する」という3つの作業があるなら、それぞれ専用のプロシージャを作り、それを順番に呼び出すように設計します。これを「モジュール化」と言います。小分けにすることで、一部を修正しても他に影響が出にくくなり、管理がずっと楽になります。
4. 引数(ひきすう)を使ってプログラムを使い回そう
プログラムを設計するときに便利なのが「引数(ひきすう)」です。これは、プロシージャに渡す「材料」のようなものです。毎回同じことしかできないプログラムよりも、その時々で材料を変えられるプログラムの方がずっと便利ですよね。
例えば、特定のメッセージを表示するプログラムを、引数を使って作ってみましょう。材料(文字)を変えるだけで、色々な場面で使い回せるようになります。
Sub MessageHyoji(kotoba As String)
' kotoba(引数)を受け取って表示します
MsgBox "本日のメッセージ: " & kotoba
End Sub
Sub RunMessage()
' 他のプロシージャから材料を渡して呼び出します
Call MessageHyoji("しっかり休憩しましょう!")
End Sub
このように、メインの処理は一つにまとめ、材料だけを外から受け取るように設計するのが、賢いプログラミングのコツです。
5. 戻り値を活用して計算を自動化する設計
前の項目で「自動販売機」に例えた Function プロシージャの設計について深掘りしましょう。計算などの「答え」が必要な場合は、必ずこの形を使います。最大の特徴は、Excelのシート上で =SUM() のように自作関数として使える点です。
設計のポイントは「計算だけに集中させる」ことです。画面にメッセージを出したり、色を変えたりといった「余計なこと」はせず、ひたすら答えを出すことだけに専念させます。こうすることで、計算ロジックがシンプルになり、間違いが少なくなります。初心者のうちは、数値計算や文字の加工などは Function で作り、全体の流れを Sub でコントロールするという役割分担を意識してみてください。
Function EnNoMenseki(hankei As Double) As Double
' 半径を受け取って、円の面積を計算して返します
' 3.14は円周率です
EnNoMenseki = hankei * hankei * 3.14
End Function
上記のコードは、半径を渡すと面積を計算して返してくれる関数です。一度作れば、何度でも再利用できます。
6. インデント(字下げ)で構造を美しく見せる
プログラミングにおいて、見た目の美しさは正しさと直結します。コードを書くときは必ず「インデント」を入れましょう。これは、キーボードの Tab キーを使って、行の始まりを右にずらすことです。特に If 文や For 文など、命令の中に別の命令が入る構造のときは必須です。
インデントがないコードは、箱の中にぐちゃぐちゃに荷物が詰め込まれた状態と同じです。どこからどこまでが一つのまとまりなのか判別できず、バグ(プログラムの間違い)を見逃す原因になります。VBAの画面(VBE)で、 Sub の中身は一段下げる、 If の中身はさらに一段下げると徹底しましょう。これだけで、あなたのプログラミングスキルはプロに近いものに見えるはずです。
7. コメントを書いて「未来の自分」を助けよう
プログラムの設計図において、実はコードと同じくらい大切なのが「コメント」です。VBAでは '(シングルクォーテーション)を先頭につけることで、その行をメモ書きとして残せます。パソコンはその行を無視するので、自由に日本語で説明を書くことができます。
「なぜこの計算が必要なのか」「この数字は何を意味しているのか」といった、コードだけでは読み取れない「意図」を書き残しましょう。1ヶ月後の自分がそのプログラムを見たとき、コメントがなければ、自分が書いたものでも意味が分からなくなっているものです。初心者の方は、まず1行ごとに「何をしているか」を説明するコメントを書く練習から始めると、プログラムの理解が深まります。
Sub TaxCheck()
Dim kakaku As Long
kakaku = 1000 ' 商品の定価を設定
' もし価格が1000円以上ならお得と表示
If kakaku >= 1000 Then
MsgBox "これは少し高価な商品です"
End If
End Sub
8. 変数の宣言を強制してミスを未然に防ぐ
VBAの設計で絶対に外せないのが Option Explicit(オプション・エクスプリシット)という呪文です。これは「変数は必ず宣言してから使います」という宣言です。通常、VBAの画面の一番上にこれを書くように設定します。
なぜこれが必要かというと、打ち間違い(タイポ)を防ぐためです。例えば Apple という変数を使いたいのに、間違えて Aple と打ってしまった場合、この宣言がないとVBAは新しい別の箱だと勘違いして、プログラムが変な動きをしてしまいます。宣言を強制しておけば、実行前に「そんな名前の箱はありませんよ!」とエラーで教えてくれます。初心者が陥りやすいミスの8割は、この設定一つで回避できると言っても過言ではありません。
9. シートやセルを「指名」して操作する設計
プログラムを書くとき、「今のセル」を対象に命令を書くのは簡単ですが、実は危険です。意図せず別のシートが開いていたときに、大切なデータを上書きしてしまう可能性があるからです。設計のポイントは、操作したい場所を「住所」のように詳しく指定することです。
例えば Cells(1, 1) だけで書くのではなく、 Worksheets("売上").Cells(1, 1) のように「売上シートの1行1列目」とはっきり書きましょう。これを「明示的な指定」と言います。多少書く手間は増えますが、これによって「誤作動」が劇的に減ります。どんな状況でも確実に狙った場所を操作できるプログラムこそが、優れた設計と言えます。パソコン初心者の方も、まずは「どのシートの、どのセルか」を意識して書くようにしましょう。
10. ユーザーの視点に立つ!親切なメッセージ設計
最後に、プログラムを「使う人」のことを考えた設計についてお話しします。プログラムが動き終わった後、何も反応がないと「本当に終わったのかな?」と不安になりますよね。また、間違ったデータを入力したときに、いきなりエラー画面が出てプログラムが止まってしまうのも不親切です。
「処理が完了しました」というメッセージを出したり、エラーになりそうなときは事前に「正しい値を入力してください」と案内を出したりするように設計しましょう。これを「ユーザーインターフェース」の工夫と言います。自分だけで使うツールであっても、こうした「おもてなし」の心を込めて設計することで、使い勝手が格段に向上し、長く愛用できるプログラムが完成します。プログラミングは単なる計算ではなく、道具を作る思いやりでもあるのです。