【第1回】マクロの記録しかできなかった私が、3年でオンプレミス開発ができるようになった話 - 変数まで完全理解する
こんにちは、すやこです。
連載記事一覧:
- 第1回:マクロの記録から変数まで(本記事)
- 第2回:ループからDictionaryまで
- 第3回以降:順次公開予定
SNS:
「マクロの記録は使えるけど、VBAのコードは書けない」
入社当時の私がまさにこの状態でした。
録画ボタンを押して、操作して、停止。
これだけでExcelが自動化できることに感動していた私が、入社3年目の今では、Pythonでオンプレミス開発ができるまでに成長しました。
「プログラミングなんて無理だ...」
「コードを見ると頭が真っ白になる...」
「VBAエディタを開くことすら怖かった...」
そんな私が、今では社内でプログラミング講師をさせていただくこともあります。
この記事では、入社から3か月までに私が実際に辿った学習の道のりを、できるだけ分かりやすく共有させていただきます。
特に、講師として教えているとつまずく方が最も多い「変数」の部分を、丁寧に解説しています。
「私にもできるかもしれない」
「一歩ずつ進めば、必ずできるようになる」
そんな希望を持っていただければ幸いです。
目次
- スタート地点:マクロの記録しか使えない私(入社3か月目)
- 第1段階:マクロの記録を「読む」ことから始める
- 第2段階:記録されたコードを「編集」する勇気を持つ
- 第3段階:変数を使い始める(コードが柔軟になる瞬間)
- ここまでで学んだこと:マクロの記録から変数まで
- 振り返って:変数を理解した時の感動
- この先の道のり
- 最後に:あなたにも必ずできます
スタート地点:マクロの記録しか使えない私(入社3か月目)
当時できたこと
- マクロの記録ボタンを押す
- 簡単な操作を記録する(セルに値を入力、コピー&ペーストなど)
- 記録したマクロを実行する
できなかったこと
- 記録されたコードの意味を理解する
- エラーが出た時の対処(エラーメッセージを見ても何を直せばいいか分からない)
- 少しでも修正を加える(文字列を変えることすら怖かった)
正直、VBAエディタを開くことすら怖かったです。
あの大量の英語の文字列を見ると、頭が真っ白になっていました。
「これを理解するなんて無理だ...」と何度も思いました。
でも、一歩ずつ進めば必ず理解できるということを、今は確信しています。
第1段階:マクロの記録を「読む」ことから始める
最初の一歩:記録されたコードを観察する
まず、簡単な操作を記録して、生成されたコードをじっくり観察することから始めました。
やってみた操作: A1セルに「あ」と入力して、Enterキーを押す
Sub Macro1()
Range("A1").Select ' A1セルを選択する
ActiveCell.FormulaR1C1 = "あ" ' 選択中のセルに「あ」を入力
Range("A2").Select ' A2セルを選択する(Enterキーの動作)
End Sub
気づいたこと(「?」を「!」に変えていく作業)
最初は全てが疑問符でした:
-
Range("A1")→ A1セルを指している? → はい、A1セルを指しています -
.Select→ 選択している? → はい、そのセルを選択する命令です -
ActiveCell→ 選択中のセル? → はい、現在選択されているセルです -
= "あ"→ あという文字列を代入している? → はい、そのセルに値を設定しています
この「?」を「!」に変えていく作業が、私の学習の始まりでした。
ポイント:
完璧に理解しようとしなくてOK。まずは「なんとなく分かった」で進みましょう。
これはこういう公式なんだという風に考えるとわかりやすいです。
VBAの基本構文について
ここで学んだ基本的な構文:
| 構文 | 説明 | 使用例 |
|---|---|---|
Range("A1") |
セル範囲を指定 |
Range("A1") = A1セル |
.Select |
セルを選択する | Range("A1").Select |
ActiveCell |
現在選択されているセル | ActiveCell.Value = "値" |
FormulaR1C1 |
R1C1形式で数式を設定 | ActiveCell.FormulaR1C1 = "=A1+B1" |
第2段階:記録されたコードを「編集」する勇気を持つ
勇気を出して初めての編集
最初は本当に小さな変更から始めました。
' 記録されたコード
Sub Macro1()
Range("A1").Select
ActiveCell.FormulaR1C1 = "あ"
Range("A2").Select
End Sub
' 編集後(「あ」を「こんにちは」に変更)
Sub Macro1()
Range("A1").Select
ActiveCell.FormulaR1C1 = "こんにちは" ' ← ここを変えた!
Range("A2").Select
End Sub
たったこれだけでしたが、「私がコードを書き換えた!」という感動は今でも覚えています。
実行して「こんにちは」と表示された瞬間、コードが動くことの楽しさを初めて実感しました。
不要な部分を削除する勇気
マクロの記録は丁寧すぎるくらい全ての操作を記録します。
実は多くが不要なコードです。Select(選択)は基本的に不要です。
' 記録されたコード(冗長)
Sub Macro2()
Range("A1").Select ' 選択する
ActiveCell.FormulaR1C1 = "Hello" ' 選択したセルに値を入れる
Range("A2").Select ' ← これ、いる?不要です!
End Sub
' 削除後(シンプルで速い)
Sub Macro2()
Range("A1").Value = "Hello" ' Selectも省略できた!直接値を設定
End Sub
なぜSelectが不要なのか?
→ セルを選択しなくても、直接値を設定できるからです。
Selectを削除すると、コードが速くなり、見やすくなります。
技術的な補足:
-
Range("A1").ValueはRange("A1").FormulaR1C1よりもシンプルで、値の設定に適している - Selectを削除することで、処理速度が向上する(特に大量のセルを扱う場合)
列の追加・削除で学んだ不要コードの削除
列の追加や削除をマクロの記録で行うと、さらに多くの不要なコードが生成されます。
これを整理することで、コードの理解が深まりました。
やってみた操作: B列を削除して、C列の前に新しい列を追加
' 記録されたコード(非常に冗長)
Sub Macro3()
Columns("B:B").Select ' B列を選択
Selection.Delete Shift:=xlToLeft ' 削除して左にシフト
Columns("C:C").Select ' C列を選択
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove ' 挿入
Range("C1").Select ' C1セルを選択
End Sub
' 削除後(シンプルで分かりやすい)
Sub Macro3()
Columns("B").Delete ' B列を削除(Select不要)
Columns("C").Insert ' C列の前に新しい列を挿入(Select不要)
End Sub
気づいたこと:
-
Columns("B:B")→Columns("B")でOK(列番号だけ指定できる) -
Selection.Delete→Columns("B").Deleteで直接削除できる(Select不要) -
Selection.Insert→Columns("C").Insertで直接挿入できる(Select不要) -
Shift:=xlToLeftなどの引数は、省略しても自動で判断されることが多い
さらに学んだこと:
列の操作でも、Selectは基本的に不要でした。
直接列を指定して操作できるので、コードが短く、読みやすくなります。
' 列の操作例
Columns("A").Delete ' A列を削除
Columns("B").Insert ' B列の前に新しい列を挿入
Columns("C").ColumnWidth = 15 ' C列の幅を15に設定
Columns("D").Hidden = True ' D列を非表示にする
この経験から、マクロの記録で生成されたコードは、必ずしも最適ではないということを学びました。
記録されたコードを「参考」にして、自分で整理することで、理解が深まります。
第3段階:変数を使い始める(コードが柔軟になる瞬間)
⚠️ 重要:講師として教えていると、つまずく方が最も多いのがこの「変数」の部分です。
変数はプログラミングの基礎中の基礎ですが、最初は「何のためにあるのか」「どう使うのか」が分かりにくいものです。
この記事では、できるだけ分かりやすく、段階的に説明していきます。
変数って何?「箱」のようなもの
変数は、値を入れておく「箱」のようなものです。
名前を付けて、そこに値を入れておくと、後で何度でも使えます。
日常生活の例:
- 冷蔵庫に「牛乳」という名前の箱があって、そこに牛乳を入れておく
- 後で「牛乳」と言えば、その箱の中身を取り出せる
- これが変数の考え方です
同じ値を何度も使うなら変数に入れる
実務では、同じ値を何度も使うことがよくあります。
例えば「2024年度」という文字列を、複数のセルに入力する場合。
' Before:同じ値を何度もコピペ(変更が大変)
Sub 売上集計()
Range("A1").Value = "2024年度売上"
Range("B1").Value = "2024年度"
Range("C1").Value = "2024年度集計"
' もし「2025年度」に変更したい場合、3箇所も直さないといけない...
End Sub
このコードの問題点:
- 「2024年度」を「2025年度」に変更したい時、3箇所も書き直さないといけない
- 書き直し忘れがあると、バグの原因になる
- コードが長くなって読みにくい
変数を使うと:
' After:変数を使用(変更が1箇所で済む)
Sub 売上集計()
Dim 年度 As String ' 【ステップ1】変数を宣言(箱を作る)
年度 = "2024年度" ' 【ステップ2】変数に値を代入(箱に値を入れる)
Range("A1").Value = 年度 & "売上" ' 【ステップ3】変数を使う(箱の中身を取り出す)
Range("B1").Value = 年度
Range("C1").Value = 年度 & "集計"
End Sub
変数を使うメリット:
- 年度を変更したい時に1箇所直すだけで済む(
年度 = "2025年度"に変更するだけ) - コードの意図が明確になる(「年度」という名前で何を表しているか分かる)
- 書き直し忘れがない(1箇所しかないので)
変数の3ステップを理解する
変数を使うには、必ず3つのステップがあります。
【ステップ1】変数を宣言する(箱を作る)
Dim 年度 As String
-
Dim→ 「変数を宣言します」という意味 -
年度→ 変数の名前(好きな名前を付けられる) -
As String→ 文字列型(テキストを入れる箱)
よくあるつまずきポイント:
- 「
Dimって何?」→ 変数を使う前に「この箱を使います」と宣言するためのキーワードです - 「
As Stringって何?」→ 箱に入れるものの種類を指定します(後で詳しく説明します)
【ステップ2】変数に値を代入する(箱に値を入れる)
年度 = "2024年度"
-
=→ 「代入する」という意味(数学の「等しい」とは違います) -
"2024年度"→ 実際に入れる値
よくあるつまずきポイント:
- 「
=は等しいって意味じゃないの?」→ いいえ、VBAでは「右の値を左の変数に入れる」という意味です - 「なぜ
"(ダブルクォート)が必要なの?」→ 文字列(テキスト)を表すために必要です
【ステップ3】変数を使う(箱の中身を取り出す)
Range("A1").Value = 年度 & "売上"
-
年度→ 変数の中身("2024年度")を取り出す -
&→ 文字列を連結する記号("2024年度" + "売上" = "2024年度売上")
よくあるつまずきポイント:
- 「変数を使う時は
"(ダブルクォート)を付けないの?」→ はい、付けません。変数名そのまま書きます - 「
&って何?」→ 文字列をくっつける記号です。"2024年度" & "売上"で"2024年度売上"になります
みそ汁のレシピで理解する変数の本質
変数の概念を理解するために、みそ汁のレシピで考えてみましょう。
みそ汁のレシピ(変数を使わない場合):
1. 水を600ml用意する
2. だしを10ml入れる
3. みそを大さじ2(30g)入れる
4. 水を600ml用意する(2人分作る場合)
5. だしを10ml入れる
6. みそを大さじ2(30g)入れる
このレシピを見て、「水の量を変えたい時に、何箇所も書き直さないといけない...」と思いませんか?
みそ汁のレシピ(変数を使う場合):
【ステップ1】人数という箱を作る
【ステップ2】人数 = 2人(箱に値を入れる)
水の量 = 300ml × 人数
だしの量 = 5ml × 人数
みその量 = 大さじ1(15g)× 人数
【ステップ3】箱の中身を使う
1. 水を「水の量」ml用意する
2. だしを「だしの量」ml入れる
3. みそを「みその量」入れる
人数を変えるだけで、全ての量が自動で計算されます。これが変数の考え方です。
VBAコードで表現すると:
Sub みそ汁を作る()
' 【ステップ1】変数を宣言(箱を作る)
Dim 人数 As Long
Dim 水の量 As Long
Dim だしの量 As Long
Dim みその量 As Long
' 【ステップ2】変数に値を代入(箱に値を入れる)
人数 = 2
' 量を計算(人数を使って計算)
水の量 = 300 * 人数 ' 1人300ml × 2人 = 600ml
だしの量 = 5 * 人数 ' 1人5ml × 2人 = 10ml
みその量 = 15 * 人数 ' 1人15g × 2人 = 30g
' 【ステップ3】変数を使う(箱の中身を取り出す)
Debug.Print "水を" & 水の量 & "ml用意する" ' "水を600ml用意する"
Debug.Print "だしを" & だしの量 & "ml入れる" ' "だしを10ml入れる"
Debug.Print "みそを" & みその量 & "g入れる" ' "みそを30g入れる"
End Sub
このコードの動き:
-
人数 = 2で人数を設定 -
水の量 = 300 * 人数で計算(300 × 2 = 600) -
Debug.Printで結果を表示
人数を4人に変更する場合:
人数 = 4 ' これだけ変更すれば、全ての量が自動で変わる!
変数の型(箱の種類)を理解する
変数には「型」というものがあります。これは「どんな種類の値を入れるか」を指定するものです。
よく使う型:
| 型 | 意味 | 例 | 説明 |
|---|---|---|---|
String |
文字列型 | "2024年度" |
テキストを入れる箱 |
Long |
整数型 | 100 |
大きな数値を入れる箱(-2,147,483,648 ~ 2,147,483,647) |
Integer |
整数型 | 100 |
小さな数値を入れる箱(-32,768 ~ 32,767)※Longの方が安全 |
よくあるつまずきポイント:
- 「型って何?」→ 箱に入れるものの種類です。文字列用の箱、数値用の箱などがあります
- 「StringとLongの違いは?」→ Stringは文字列(テキスト)、Longは数値です
- 「どれを使えばいいの?」→ 文字列なら
String、数値ならLongを使えばOKです
実務での例:
Dim 年度 As String ' 文字列("2024年度")
Dim 売上 As Long ' 数値(1000000)
Dim 人数 As Long ' 数値(10)
変数の本質を理解する
変数の3つの特徴:
-
変数は「箱」のようなもの
→ 値を入れておく場所。名前を付けて管理する -
名前を付けることで意味が明確になる
→ 「年度」「人数」「水の量」など、何を表しているか分かる
→ コードを読む人が理解しやすくなる -
値を変えるだけで、全体が変わる
→ 人数を2から4に変えるだけで、全ての量が自動で変わる
→ 変更が1箇所で済む
実務での活用例
' 実務での例:年度を変数にする
Sub 売上集計()
Dim 年度 As String
年度 = "2024年度" ' ここを変えるだけで、全ての処理が新しい年度に対応する
Range("A1").Value = 年度 & "売上"
Range("B1").Value = 年度 & "集計"
Range("C1").Value = 年度 & "分析"
End Sub
年度を2025年度に変更する場合:
年度 = "2025年度" ' これだけ変更すればOK!
つまずきポイントまとめ
講師として教えていると、以下の点でつまずく方が多いです:
-
Dimの意味が分からない
→ 「変数を使います」という宣言です。箱を作るイメージです -
=の意味が分からない
→ 数学の「等しい」ではなく、「右の値を左の変数に入れる」という意味です -
変数を使う時に
"を付けるか分からない
→ 付けません。変数名そのまま書きます(年度と書く。"年度"ではない) -
型(String、Longなど)の違いが分からない
→ 文字列ならString、数値ならLongを使えばOKです -
変数を使うタイミングが分からない
→ 同じ値を何度も使う時、変更する可能性がある時は変数を使いましょう
変数を使うことで、変更が1箇所で済む、コードの意図が明確になるというメリットが実感できるようになりました。
最初は難しく感じるかもしれませんが、使っていくうちに自然と理解できるようになります。
ここまでで学んだこと:マクロの記録から変数まで
入社から3か月までに、私は以下のことを学びました:
- マクロの記録を「読む」 → コードの意味を理解する
- 記録されたコードを「編集」 → 小さな変更から始める
- 列の追加・削除で不要コードを削除 → コードを整理する
- 変数を使い始める → コードが柔軟になる
特に変数は、プログラミングの基礎中の基礎です。
この変数を理解できたことで、その後の学習が一気に加速しました。
振り返って:変数を理解した時の感動
変数を理解した瞬間、「あ、これでコードが柔軟になるんだ!」と実感しました。
年度を変更する時に、1箇所直すだけで済む。
人数を変えるだけで、全ての量が自動で変わる。
「プログラミングって、こんなに便利なんだ」
この感動が、その後の学習を続ける原動力になりました。
この先の道のり
変数を理解した後、私は以下のステップを進みました:
- ループを覚える → 繰り返し処理ができるようになる
- 配列を理解する → 処理速度が劇的に速くなる
- Collectionを知る → 複数の値を管理できる
- Dictionaryを活用 → 重複チェックや集計が簡単に
そして、VBAで培った基礎を活かして、Pythonでのオンプレミス開発まで到達しました。
でも、その全ての基礎となったのは、まさにこの「変数」の理解です。
続きは後編(ループからDictionaryまで)をご覧ください。
最後に:あなたにも必ずできます
「マクロの記録しか使えない」
これは恥ずかしいことではありません。
むしろ、そこから始められることが強みです。
なぜなら、実務で何を自動化したいかが明確だからです。
私も最初は記録されたコードの意味が1行も分かりませんでした。
VBAエディタを開くことすら怖かったです。
でも、一歩ずつ進めば、必ずできるようになります。
入社3か月目の私が、この道のりを歩みました。
そして3年後の今、Pythonでオンプレミス開発ができるまでに成長しました。
その基礎となったのは、まさにこのVBA学習の経験です。
変数を理解できたあなたなら、きっと次のステップも進められます。
一歩ずつ、着実に。
必ずできるようになります。
皆様のVBA学習を応援しています。
ご質問があればお気軽にコメントください😊
この記事が参考になりましたら、ぜひ「いいね」をお願いします。
励みになります!
続きは後編(ループからDictionaryまで)をご覧ください。
連載記事一覧:
- 第1回:マクロの記録から変数まで(本記事)
- 第2回:ループからDictionaryまで
- 第3回以降:順次公開予定
SNS: