- Excelの作業を自動化したいけど、プログラミングは難しそう…
- マクロを習いたいけど、エクセル初心者でも理解できるの?
- 要点だけを簡単な例で教えてほしい
このようなお悩みをお持ちですか?
この記事を読むことで、下記のことがわかります。
- Excel初心者でも、VBAを使ったマクロを習得できる
- マクロを作成するうえで、習得必須な項目を超簡単な例で学習できる
-著者情報-
名前:Utatane
VBA(マクロ)歴:3年
Excel使用歴:15年以上
ひとこと:初心者だった当時に戻った気持ちになって解説いたします
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
VBAを使ったExcelマクロ入門
「Excelのマクロは難しそう…」と思うかもしれません。
でも大丈夫です。安心してください。
私も最初は初心者でした。
だからこそ「理解しにくい部分」や「つまずくポイント」がわかります。
今回はそのあたりを中心に、できるだけわかりやすく解説いたします。
今回、マクロを作成するうえでよく使う以下の7つを厳選しました。
- 初めてのマクロ作成
- セルへの書き込み
- デバッグ
- 変数
- 配列
- 条件分岐
- 繰り返し
タイトルだけ見ると難しそうに思えますが、それぞれ理解しやすいよう解説しております。
1つ1つ見ていきましょう。
初めてのマクロ作成
マクロ作成に必要なものは「Excel(エクセル)」だけです。
Excelを自動化したいのですがら、Excelは既にある前提で進めます。
ではまず、マクロの作成を始める前に、1つ確認してほしいことがあります。
質問:Excel上部のメニューに「開発」というタブ(項目)はありますか?

開発タブが無いとマクロを作成することはできません。
下記手順で「開発」タブを表示させましょう。
- Excelの「ファイル」メニューをクリック
- 下の方にある「オプション」をクリック
- 「リボンのユーザー設定」をクリック
- 「開発」にチェックを入れ、「OK」をクリックして完了
メニューやボタンの場所がよくわからない場合は、下記記事をご覧ください。
画像付きで超わかりやすく解説しています。
上記記事では、初めて作成するマクロも併せて解説しておりますので、ぜひご覧ください。
下記のようなマクロを作成し、実行できたら次に進みましょう。
Sub マクロ入門()
Range("A1").Value = "Utatane"
End Sub

セルへの書き込み
前項に引き続き、「セルへの書き込み」についてもう少し掘り下げます。
セルへの書き込みは基本中の基本ですので、しっかり勉強しましょう。
前項のおさらいです。
下記が書き込みの入門コードです。
これで、セルに値を書き込みすることができます。
Sub マクロ入門()
Range("A1").Value = "Utatane"
End Sub
2行目の「Range」でセルを指定しています。
(今回はA1セルを指定)
しかしながら上記の指定は、現在開いているシートに限られます。
例えば「Sheet1」と「Sheet2」があり、現在「Sheet1」を開いている状態だとします。

別のシートである「Sheet2」のセルに書き込みしたい場合は、下記のようにコードを追加する必要があります。
Sub 別シートを指定()
Worksheets("Sheet2").Range("A1").Value = "Utatane"
End Sub
2行目の頭に「Worksheets(“Sheet2”).」が追加されています。
これで「Sheet2」を指定したことになり、「Sheet2」の「A1セル」に「Utatane」と書き込みすることができます。
他にも範囲指定したり、別のブックを指定することもできます。
少し難しい内容もありますので割愛しますが、気になる方は下記記事をご参考ください。
次はデバッグです。
デバッグを知っておくと、より確実にマクロを作り上げることができます。
デバッグ
デバッグとは、プログラムの誤り(バグ)を見つけ、手直しをすることをいいます。
思い通りに動作しない場合や、エラーが発生した際に原因を特定し、改善するということです。
エラーが嫌で挫折する人は多くいますが、プログラミングにエラーはつきものです。
早い段階でデバッグの方法を知っておくと、後がラクになります。
ではまず、入門編です。
下記のVBAコードを実行してみましょう。
Sub デバッグ入門()
Debug.Print "ようこそマクロの世界へ!"
End Sub
おそらく何も起こらないと思います。
なぜなら、デバッグを表示させる画面が無いからです。
デバッグを表示させる画面を出すには、
「VBA Project」の画面上部にあるメニューから、「表示」→「イミディエイトウィンドウ」をクリックします。
場所がわからない場合は、下記記事をご参考ください。
画像付きでわかりやすく解説しております。
デバッグの方法も紹介しておりますので、ぜひご覧ください。
デバッグ方法がわかっても、エラーが無くなるわけではありません。
よくあるエラーを紹介いたしますので、困ったらここを見てください。
よくあるエラーの原因と対処法
エラー内容 | 原因 | 対処法 |
このプロジェクトのマクロは 無効に設定されています | マクロが無効になっている | マクロを有効にする マクロを有効にする方法 |
コンパイルエラー | スペルミスの可能性が高い | コードを再確認する |
実行時エラー | セルの指定ミス 存在しないファイルやシートを指定した 型の不一致など | コードを再確認する よくある原因と対処法 |
最後の「型の不一致」は「変数」を使用しているとよく起こります。
次はその「変数」について勉強していきましょう。
変数
変数は、値を自由に入れ替えすることができる器のようなものです。
変数に入れることができる値は1つだけです。
例えば、「1」と「2」や、「りんご」と「みかん」など2つ以上の値を入れることはできません。
ただし、2つの値を計算したり、結合したりすることで、複数の値を入れたように見せることができます。
あまりピンとこない方は、下記記事をご参考ください。
図解でさらにわかりやすく解説しております。
では変数を使った入門用のコードをお見せします。
Sub 変数入門()
Dim name As String
name = "Utatane"
Debug.Print name
End Sub
上記VBAコードにて、下記のような処理を行っております。
- 変数の宣言
- 変数に値を代入
- 変数の中身を表示
1つ1つ解説していきます。
変数の宣言
Dim name As String
まず2行目の宣言(Dim name As String)について解説いたします。
これは、変数である「name」をこれから使いますよ!という宣言です。
変数名(name)は基本何でも大丈夫ですが、わかりやすい名前にしましょう。
一部付けられない名前がありますので、「変数についての記事」をご参考ください。
「Dim」は宣言をするための呪文のようなものだと思ってください。
「宣誓!」や「はじめまして!」みたいなものでしょうか。
「As String」で型を指定しています(Asは定型文)
変数には型というものがあり、今回は「String」という文字列型を指定しました。
文字列型は「うたたね」や「Utatane」など文字(ひらがなカタカナ英字漢字)のみ入れることができます。
逆に数値や日付など、文字以外の値は入れることができません。
型は他にも「Integer型(数値のみ)」や「Date型(日付のみ)」などがあります。
中には「Variant型」といって、文字でも数値でも何でも入れることができる型もあります。
困ったら「Variant型」で宣言するのも一つの手ですが、何をするための変数なのかが途中でわからなくなるデメリットもあります。
極論を言えば、宣言自体をしなくても大丈夫です。エラーにはなりません。
宣言をしなかった変数は、「Variant型」として作成されます。
しかしながら、変数の宣言をしないと、何個の変数が何の用途で使われるかがわかりにくくなり、デバッグ作業が大変になる場合があります。
変数に値を代入
name = "Utatane"
3行目で変数(name)に値(Utatane)を代入しています。
代入とは、変数に値を格納することをいいます。
「靴箱(変数)に靴(値)を入れる」「グラス(変数)にジュース(値)を注ぐ」ようなものでしょうか。
再度コードを見てください。
「=(イコール)」を境に左辺が変数、右辺が値です。
これで変数「name」に値「Utatane」が代入されます。
この時、値は「”(ダブルクォーテーション)」で囲ってください。
(値が数値なら、「”」で囲う必要はありません)
「”」で囲う理由は、値と変数の区別をつけるためです。
値は「”」で囲い、変数は囲いません。
数値も「”」で囲う必要が無いのは、数値のみの変数が存在しないから(数値のみの変数名はつけられないから)です。
変数の中身を表示
Debug.Print name
最後に変数の中身を表示させています。

今回は、前項で解説した「Debug.Print」を使用して表示させています。
前項では値を直接書きましたが、今回は変数「name」を書いています。
※変数なので「”」で囲わないでください。
変数名を書くことで、変数の中身である値(今回の場合は「Utatane」)を表示させることができます。
その他、変数を使った計算や文字の結合方法については、「変数についての記事」をご参考ください。
配列
配列は、前項で解説した「変数」が集まったようなものだと思ってください。
「靴箱(変数)が集まった下駄箱(配列)」「家(変数)が集まった集合住宅(配列)」といったところでしょうか。
「変数」は値を1つしか格納できませんが、配列は複数の値を管理することができます。
下記記事にてもっと詳しく解説していますので、ピンと来ない方はご参考ください。
では入門編として、簡単な例をコート付きでお見せします。
Sub 配列入門()
Dim getabako(2) As Integer
getabako(0) = 1
getabako(1) = 2
getabako(2) = 3
Debug.Print getabako(0)
Debug.Print getabako(1)
Debug.Print getabako(2)
End Sub
処理の流れは以下のとおりです。
- 配列の宣言
- 配列に値を代入
- 配列の中身を表示
1つ1つ解説いたします。
配列の宣言
Dim getabako(2) As Integer
上記一文にて、配列の宣言を行っております。
前項で解説した変数の宣言とほぼ同じなので詳細は割愛しますが、1点だけ違うところがあります。
(2)が追加されていますね。
これは「要素」といって、配列の中の部屋がいくつあるのかを表したものです。
下駄箱やアパートの部屋数だと思ってください。
今回は「2」としていますが、実は注意が必要です。
「2」=「2部屋」だと思ってはいけません。
配列の要素は「0」から数えるルールとなっており、今回の場合は、「0、1、2」の3部屋となります。
配列に値を代入
getabako(0) = 1
getabako(1) = 2
getabako(2) = 3
上記VBAコードにて配列に値を代入しています。
また、()が出てきてますね。
要約すると下記の処理を行っております。
- 0番目の要素(0号室)に1を代入(1人を入れた)
- 1番目の要素(1号室)に2を代入(2人を入れた)
- 2番目の要素(2号室)に3を代入(3人を入れた)
配列の中身を表示
Debug.Print getabako(0)
Debug.Print getabako(1)
Debug.Print getabako(2)
最後に配列の中身である値を表示させています。

代入するときと同じく要素番号を指定することで、その要素に代入されている値を表示させることができます。
要素を宣言しない配列(動的配列)や多次元配列、
配列をスマートに記述する方法などは、「配列についての記事」をご参考ください。
条件分岐
「雨が降っていたら傘を持っていく」「12時になったらご飯を食べる」というように、
日常でも特定の条件で行動を変える場合がありますよね。
それが「条件分岐」です。
入門編として、簡単な例を見ていきましょう。
Sub if入門()
Dim count As Integer
count = 0
If count = 0 Then
Debug.Print "無くなりました"
End If
End Sub
2~3行目は変数の宣言・代入のため割愛します。
5~7行目で条件分岐を行っております。
If count = 0 Then
Debug.Print "無くなりました"
End If
それぞれの役割を簡単に説明します。
- If(もしも):定型文なので意識しなくてOK
- count = 0:変数「count」が0と等しい
- Then(~なら、~のとき):定型文なので意識しなくてOK
なので5行目は、
【もしも変数「count」が0と等しいなら】となります。
6行目に処理内容を書きます。
5行目の条件(countが0と等しい)に当てはまった場合に行う処理です。
今回は解説済の「Debug.Print」で表示させただけですので、詳細は割愛します。
countが1など、条件に当てはまらなかった場合は、何も実行されません。
条件に当てはまらなかった場合も処理をさせることができます。
下記記事をご参考ください。
今回は条件分岐に「If」を使いましたが、他にもあります。
下記記事で解説している「Select Case」は、複数の条件によって処理を変えたい場合に便利です。
(「count = 0 なら●●、count = 1なら▲▲、sount = 2なら■■」など)
繰り返し
条件分岐と同様に、繰り返しもよく使う処理ですので、覚えておきましょう。
例えば子供の頃、「お風呂に浸かったら、10数えなさい」と言われた人も多いかと思います。
これも一種の繰り返しで、「数を数える」という処理を繰り返して、カウントを1ずつ増やしているだけです。
今回は入門編として、簡単な繰り返し処理の例を見ていきましょう。
Sub 繰り返し入門()
For count = 1 To 5
Debug.Print count
Next count
End Sub
2~4行目が繰り返しの処理です。
それぞれの役割は以下のとおりです。
- For(繰り返しをするぞ!):定型文なので意識しなくてOK
- count = 1 To 5(繰り返す回数指定):変数「count」が現在1なので5になるまで繰り返し
- Next count(カウントを増やす):count + 1という認識でOK
これで5回繰り返し処理が行われ、イミディエイトウィンドウに「1 2 3 4 5」と表示されます。

もう少しわかりやすく解説した記事があります。
1つ飛ばしで繰り返す方法なども紹介しておりますので、ぜひご覧ください。
範囲選択した部分をまとめて繰り返し処理したい場合は「For Each」が便利です。
処理も速く、コードもわかりやすいです。
「For」や「For Each」の他にも「While」という繰り返し文があります。
これは、特定の条件(price < 1000など)の間だけ繰り返し処理を行うというものです。
繰り返す回数は決まっていないけれど、条件を指定して繰り返したい時に便利です。
下記記事で詳しく解説しております。
以上でよく使う7つの処理の解説を終了します。
ここからは、中・上級者への道と題して、脱初心者になるためのコツを紹介いたします。
中・上級者への道
変数の宣言を強制する
本編の「変数」の項でも少し触れましたが、
変数は宣言をしなくても使用することが可能です。
しかしながら変数を宣言しないと、デバッグに時間がかかってしまう原因となります。
- 変数を宣言しない
- エラーが発生
- デバッグを開始
- どんな変数が使われているのかわかりにくく、デバッグに苦戦
プログラムが複雑になればなるほどその負担は大きくなります。
そんな問題を防ぐため、変数の宣言を強制しましょう。
やり方は簡単!
モジュールの冒頭に「option explicit」と書くだけです。
これで変数は宣言しないと使えなくなります。
詳細は下記記事で解説しておりますので、ご参考ください。
マクロの高速化
マクロ作成に慣れてきたら、少しずつ複雑なプログラムに挑戦することも多いと思います。
ただし、何も考えず断片的にコードをくっつけただけでは、処理に時間がかかってしまいます。
ある程度の理屈がわかってきたら、処理の高速化も意識しましょう。
ひとまず意識するのは以下の1点だけです。
- セルの処理回数を減らす
例えばセルA1~A5の数値を2倍にする場合を2つの例でお見せします。
For i = 1 To 5
Cells(i, 1).Value = Cells(i, 1).Value * 2 ' 1つ1つセルを読み書きしている
Next i
Dim cell As Range
For Each cell In Range("A1:A5") ' セルをまとめて指定
cell.Value = cell.Value * 2
Next cell
前者はセル1つ1つを読み書きしているのに対し、後者はセルをまとめて処理しています。
このようなわずかな違いでも、大きなプログラムなら差が出てきます。
余裕があればでいいので、意識するようにしてください。
処理の時間を測る方法も含めて、下記記事で詳しく解説しております。ご参考ください。
以上を実行したり意識するだけで、マクロの脱初心者は目前です。
定期的に振り返りながら、学習を進めてください。
最後に
VBAを使ったExcelマクロの入門方法を解説いたしました。
当ブログでは、VBAマクロやPythonなど、時間を生み出すプログラミング術を公開しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
最後までお読みいただき、ありがとうございました。がんばってください!