なぜ変数を使わないといけないのか?

VBAの本を読んでいると、必ず出てくる「変数」。
「Dim」という見慣れない言葉。「なぜ必要なのか」が分からないまま、とりあえず書いている——そんな経験はありませんか?

変数を使わないといけない理由は、コードの中で同じ値を何度も使うとき、変数がないと一か所変えるだけで全体が壊れるからです。変数は「値に名前をつけて管理する仕組み」です。これがあることで、コードが読みやすくなり、修正も簡単になります。

この記事では、次のことを解説します。

  • 変数が必要な理由を「使わない場合」と比較して解説
  • 変数を使うことでコードがどう変わるか
  • Dimで宣言する意味と、しないとどうなるか

なぜ変数を使わないといけないのか——変数なしのコードで考える

変数を使わないと、同じ値が何か所にも散らばる

たとえば、最終行を取得して処理をするコードを書くとします。変数を使わない場合、こうなります。

Range("A1:D" & Cells(Rows.Count, 1).End(xlUp).Row).CopyRange("A1:D" & Cells(Rows.Count, 1).End(xlUp).Row).Interior.Color = RGB(255, 255, 0)MsgBox "データは" & Cells(Rows.Count, 1).End(xlUp).Row & "行あります"

Cells(Rows.Count, 1).End(xlUp).Rowという記述が3か所に出てきます。

もし最終行の取得方法を変えたいとき、3か所全部を直さなければいけません。1か所直し忘れると、コードが正しく動かなくなります。

変数を使うと、こう変わります。

Dim ls_rw As Long
ls_rw = Cells(Rows.Count, 1).End(xlUp).Row
Range("A1:D" & ls_rw).CopyRange("A1:D" & ls_rw).Interior.Color = RGB(255, 255, 0)MsgBox "データは" & ls_rw & "行あります"

最終行の取得は「ls_rw = Cells(Rows.Count, 1).End(xlUp).Row」の1か所だけです。変更が必要になったときも、1行直すだけで済みます。コードが短くなり、修正も一か所で完結します。

変数を使わないと、コードが何をしているか読めなくなる

Cells(Rows.Count, 1).End(xlUp).Rowという記述は、慣れていないと何をしているのかすぐには分かりません。これが何か所にも出てくると、コード全体を読むのが大変になります。

ls_rw(last_rowの略)という変数名にすると、「ああ、これは最終行のことか」と一目で分かります。

変数には「コードに意味を持たせる」という役割もあります。変数名を適切につけることで、コードが読みやすくなり、後から見直したときにも意図が伝わりやすくなります。

「Dim」で宣言する意味——しないとどうなるか

VBAでは変数を使う前にDim 変数名 As 型と宣言します。「なぜ宣言が必要なのか」と感じる方も多いと思います。

宣言しないと「型」が決まらない

変数を宣言せずに使うことはVBAではできます(Option Explicitをオフにすれば)。ただし、その場合は変数の「型」が自動的に決まります。

型とは「この変数には何を入れるか」の定義です。数値なのか、文字列なのか、日付なのか。型が決まっていないと、意図しない動作やエラーの原因になります。

Dim ls_rw As Longと宣言すると、「この変数には整数を入れる」とVBAに伝えることができます。型を明示することで、コードの意図が明確になり、エラーが起きにくくなります。

Option Explicitを設定しておく

VBEのモジュール先頭にOption Explicitと書いておくと、宣言していない変数を使ったときにエラーが出るようになります。

一見不便に感じますが、これは「変数のタイプミスを防ぐ」ための設定です。変数名を間違えて別の変数として認識されてしまうミスを、コンパイル時点で検出できます。慣れてきたら必ず設定しておくことをおすすめします。

まとめ

変数を使わないといけない理由は、コードを「管理しやすくするため」です。

  • 同じ値が何か所にも散らばるのを防ぐ——修正が一か所で済む
  • コードに意味を持たせる——変数名で「何をしているか」が伝わる
  • 型を明示することでエラーを防ぐ——意図しない動作が起きにくくなる

変数は「面倒な手順」ではなく、コードを長く使い続けるための設計です。最初は宣言が手間に感じるかもしれませんが、変数を使う習慣がついてくると、コードが格段に読みやすくなります。

よくある質問

Q. 変数を使わなくてもコードは動きますか?

動きます。ただし、同じ値が何か所にも出てくるコードは、修正のたびに全箇所を直さなければならず、ミスが起きやすくなります。コードが長くなるほど、変数なしでの管理は難しくなります。

Q. 変数名はどうつければいいですか?

「何を入れているか」が分かる名前をつけることが大切です。ls_rw(最終行)、t_sh(target_Sheet対象シート)のように、役割が伝わる名前にしてください。axのような短い名前は、後から読み返したときに意味が分からなくなります。

Q. AsのあとのLongやStringは何ですか?

変数の「型」です。何を入れるかによって使い分けます。整数を入れるならLong、文字列を入れるならString、真偽値(TrueかFalse)を入れるならBooleanが基本です。型を間違えると、計算結果がおかしくなったりエラーが出たりします。

Q. Option Explicitはどこに書けばいいですか?

VBEのモジュールの一番上、どのプロシージャよりも前に書きます。VBEのメニューから「ツール→オプション→変数の宣言を強制する」にチェックを入れると、新しいモジュールに自動で追加されるようになります。

Q. マクロの記録で作ったコードには変数がありません。問題ですか?

マクロの記録は変数を使いません。そのため、記録されたコードはそのままでは修正がしにくい状態です。記録されたコードを読み解いて、繰り返し使う値を変数に置き換えることで、より使いやすいコードに整理できます。

変数の使い方から、実務で使えるVBAの書き方を体系的に学びたい方は、JIMOVEの動画講座をご覧ください。

「なぜDimで宣言するのか」「なぜこの型を使うのか」まで丁寧に解説しています。

動画で学びたい方へ

「記事を読んでも、実際に自分で書けるか不安…」という方には、動画で基礎からじっくり学べる講座がおすすめです。

VBAが初めての方を前提に、つまずきやすいポイントを先回りして解説しています。サンプル動画は無料でご覧いただけます。

動画で学ぶExcelマクロ|JIMOVEオンラインスクール

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール