エクセル関数を使って効率化しているが限界を感じる…
前任者のVBAを修正したいけど読み方が分からない
エクセルでデータ処理を行う時、何度も同じ作業を繰り返すような、非効率と感じる作業をすることは、誰しもあると思います。そんな時VBA(マクロ)が組めれば楽になる、ということは知っていても、勉強が億劫だと思っておられる方もいるのではないでしょうか。
そこで今回は、10分でVBAの使い方が分かる、VBAの基礎知識を一つの記事にまとめてみました。是非この記事を参考に、VBAでの業務改善をしてみてください!
このサイトでは、効率化に関する様々な情報を発信しています。ChatGPTとVBAの連携や、生成AIの情報も掲載しているので、ぜひそちらも参考にしてみてください!
目次
今回使用するサンプルと実行する動作
今回紹介する内容は、
・VBAの基本
・ループ処理
・条件分岐
・デバッグ
という4つのカテゴリーに分かれています。
それぞれを、次のようなサンプルを使って紹介します。サンプルの動作の横に、説明する事項も書いているので、コードが浮かばないところから読み進めてください。
①A1に”No”という文字列を入れる【基本】

②A2から下に、1,2,3…と連続した数字を入れる。【ループ】

③”山田三郎”の行のチェックに”〇”をつける【条件分岐】

④動作を一行ずつ確認する【デバッグ】

【VBA基本の基本】VBAとは?
VBAとは、主にExcelで使えるプログラミング言語です。作業の自動化や複雑なデータ処理が手軽にできるようになり、業務効率化に役立ちます。
マクロ記録機能で手軽に始められ、初心者でも簡単に学べられるのも特徴の一つです。このマクロの記録は、繰り返し作業を自動化したい初心者にとっては、とても便利な機能です。別の記事で、「マクロ」の説明も含めて詳しく解説しているので、そちらも参考にしてみてください。
【VBAの基本】環境設定
環境設定で最低限必要なことは、VBAを書く場所を表示させることです。
手順は、
①開発タブを表示
②VBEの画面の表示
③標準モジュールの追加
の3つとなります。
①開発タブの表示
上部のリボン部分に「開発」というボタンを表示させる設定方法です。すでに出ている場合は、②に進んでください。

①-1:上部バーで右クリック

①-2:右側の「開発」にチェックを入れて、「OK」を押す

上部に開発のタブが表示されていれば、設定完了です。
②VBEの画面の表示
VBEとは、VBAを編集する為の場所(ウィンドウ)の事です。
VBEは「開発タブ」→「Visual Basic」とクリックすることで表示させることができます。

③標準モジュールの追加
次にVBEに標準モジュールを追加していきます。標準モジュールはVBEの中に作る、VBAを書き込むシートのようなものです。
追加方法は「挿入」→「標準モジュール」と選択します。

上のグレーの画面に、新しく白い画面が表示されれば、標準モジュールが追加されています。

※その他の設定
最低限の設定は③で完了ですが、画面の色や変数などの設定についても、変更しておいた方が使いやすくはなります。


画面の色変更などの、その他の詳細設定については、別ページで解説していますので、そちらも併せて確認してみてください。
【VBAの基本】コードはSubの間に書く
VBAでは、Sub ○○ () から End Subの間に、コードを書いていきます。○○の部分には、自分で決めた好きなコードの名前を付けることができます。
Sub ○○() ’○○がこのVBAの名前。日本語でもOK
‘コードを書く部分
End Sub
今回は、「Name_List」という名前のVBAを作成します。ちなみに名前は日本語でもOKです。

【VBAの基本】セルの場所はRangeで指定する
セルの場所を表す方法はRangeとCellという2種類があります。それぞれ特長はありますが、基本的にRangeを使っていれば問題はありません。
Rangeを使ってセルをしているするときは、Range(“セルの場所”)という形で場所を指定します。仮にA1という場所を指定する場合、次のように書きます。
Range(“セルの場所”)
A1を表す場合→Range(“A1”)
これを使って、サンプルのA1に”No”という文字列を入れるコードを書いていきます。

【サンプル】①A1に”No”という文字列を入れる
まず今回はA1という場所に文字を入れるので、Range(“A1”)を使います。次に文字は “(ダブルクォーテーション)で囲むと、囲まれた言葉がVBAの中で文字(文字列)として処理されます。
そして、Range(“A1”)という場所に、”No”というデータを入れるという動作は、=(イコール)を使って行います。データを入れるときは、=(イコール)を基準に右から左にデータを入れる、というイメージで行われます。

今回、Range(”A1″)に”No”と書き込むということは、Range(“A1”)に”No”というデータを入れるということになります。つまり今回は、Range(“A1”)=”No”となります。
これをSub ○○() ~ End Subの間に書けば、A1に”No”と書き込むコードは完成です。

なお、今回は紹介していませんがRangeでは範囲指定をすることもできます。また、後ほど紹介するループの処理で、横の移動をする場合はCellsを使用する必要があります。
RangeとCellsについての細かい情報は、以下ページにまとめています。
【VBAの基本】変数とは
変数は、データを一時的に入れる箱のようなものです。変数に、数値や文字列などのデータを入ることで、一時的にデータを保存し、必要な場所で使えるようになります。
変数は、自分で好きな言葉を設定することができ、日本語も設定可能です。
使い方は、
①変数を宣言
②変数にデータを「代入」
という2つのステップです。
①変数の宣言
宣言とは、自分で決めた変数の中に、どんなデータが入るのかを書くことです。変数を使う時には、整数が入るのか、文字が入るのかなど、変数の型を宣言するのが一般的です。
VBAでは「Dim 変数 as データ型」と書き込むことで変数の宣言をすることができます。データ型の部分には、整数や文字列などデータの種類を記載します。
Dim 変数 as データ型
「Ex」という名前の文字が入る変数→Dim Ex as String
何が入るかを表すデータ型ですが、文字や数字など入る物によって書き方が異なります。ただVariantというなんでもOKの形があります。なので初めは、Variantだけ覚えておけば問題ありません。
今回は、Maxrowという変数をVariant型で宣言します。

※データ型について
データ型について、読み返した時やコードミス防止の意味から、数値であれば数値で宣言をする方が、ベターではあります。
別ページで、データ型の意味や種類なども併せて解説している為、併せて確認してみてください。
②代入方法
代入は、宣言した変数に、数値や文字などのデータを入れる事を言います。
代入するときは、「変数 = 入れたいデータ」という形で記載します。イコールの左側に変数を置き、右側に代入したいデータを書きます。右から左にデータを入れるイメージです。

先ほどの、Range(“A1”)にデータを入れるときと、考え方は同じです。
では①で作成したMaxrowという変数に、1番下の行である51行目を入れる場合は次のようになります。

※Maxrowについて
リストの一番下までの繰り返し処理を行うとき、一番下の行を数字で指定してしまうと、長さが変わった時、毎回コードを書き直す必要があります。
そこで、リストの一番下が何行目かを自動的に検出することで、コード変更なく自動で毎回長さに応じた繰り返し処理を行ってくれるようになります。
一番下の行を検出するコードは、次の通りです。
MaxRow = Range(“始まりのセル”).End(xlDown).Row
これを今回のコードにあてはめると、名前の行であるB行の一番下が、このリストの一番下ということになります。

B列の始まりのセルはB1になる為、コードに直すと次のようになります。

下以外にも、一番右の列を調べることもできます。詳細については、別ページを参照してください。
【ループ】ループ処理で重要なForループの使い方
同じことを繰り返す処理を、ループ処理と言います。ループ処理の中でForループは、VBAの中でも最重要な考え方の一つです。
同じ式で計算を繰り返す、上から順番に調べていくなど、ループ処理には様々な使い方がありますが、今回は「②A2から下に、1,2,3…と連続した数字を入れる。」という処理を行っていきます。

For分の基本的な使い方
For~Nextの書き方は次のような形になります。
For 変数 = スタートの数 To ゴールの数
– 処理 –
Next 変数
これで変数の値が、スタートの数からゴールの数まで一つずつ増えながら、処理の内容を繰り返し実行していきます。
サンプルを使って、詳しく解説します。
【サンプル】A2から下に、1,2,3…と連続した数字を入れる。
今回行いたい動作は、2行目から最終行目まで、1,2,3…と連続した数字を入れるといったものです。ループの処理としては、2行目(スタート)から最終行(ゴール)まで、数字を一つずつ入れていく(処理)となります。
なのでまずスタート・ゴールの数として、行数を使います。スタートの数は2・ゴールの数はMaxrowということになります。


Forループを書くときは、まずFor 変数の冒頭部分と、Next 変数の部分を書いていきます。今回のコードは次のようになります。今回は i という変数を宣言して処理を行っていきます。

これで「For ~ Next i」の間で、iが2・3・4…と一つずつ増えていき、51になったら繰り返しをやめるコードになります。
次に、A2から1から順番に数字を入れていきます。iの数は、2から一つずつ増えていくため、これをRangeに入れることで上からセルを一つずつ選択していきます。
Rangeに変数を入れるときは、Range(“列名”& 変数)と書きます。今回はA列のi行目の処理を書く為、Range(“A”& i )となります。

次にその場所に書き込む数字部分です。i は2・3・4…と増えていくのに対して、数字は1・2・3…です。すなわち入れたい数字は、i から1を引いた数字、「i – 1」となります。

その他のループ処理
ループ処理の最低限の使い方は以上ですが、2ずつ数字を増やす場合や緊急停止など、機能はまだまだあります。
VBAループ処理の動作は別ページでまとめていますので、是非ともこちらも併せて確認をお願いします。
【分岐】If文を使って条件分岐をする
『特定の条件に応じて、実行するコードを分岐させる仕組み』のことを、条件分岐と言います。
VBAで条件分岐を行う場合、IF構文を使うのが最も一般的です。
IF文の基本的な使い方
公式としては、次のように書きます。
If 条件式 Then
条件を満たしたときの処理
End If
これで条件に当てはまる時だけ、If ~ End Ifの間に書かれた処理が行われることになります。逆に条件を満たさない場合は処理がされません。
これにより、条件によって処理が変わるコードを組むことができます。
【サンプル】”山田三郎”の行のチェックに”〇”をつける
サンプルとして、「山田三郎」の行にチェックをつけるコードを作成します。

Forループと組み合わせて、上から一つずつ文字を確認して、「山田三郎」の場合チェックに〇を書き込みます。
なのでまずFor 変数の冒頭部分と、Next 変数の部分を書いていきます。

次に、If文を使った条件分岐のコードを書いていきます。このForの中では、 i が2~最終行の数まで、1ずつ増えていくので、i 行目の名前を確認するコードを作成することになります。
すなわち条件は、「B列の i 行目が”山田三郎”だった場合」になるので、これをコードで書くと、「Range(“B”& i )=”山田三郎”」になります。
そして処理は、「チェック欄に〇をつける」です。チェック欄の列はC列目で、行数は山田三郎が見つかった時の行数なので、 i 行目になります。すなわち処理をコードに直すと、「Range(“C”& i ) = “〇”」になります。
つまり今回作成するIf文は次のようになります。
If Range(“B” & i) = “山田三郎” Then
Range(“C” & i) = “〇”
End If
これを、先ほど作ったFor文の中に書き込めば、For文の中に入った条件分岐式が完成します。

※○○を含む文字列
今回は”山田三郎”という完全一致の条件を紹介しましたが、部分一致でも条件式を作ることは可能です。その場合、=(イコール)をLikeに書き換え、文字列の中の両端に*(アスタリスク)をつけることで部分一致のコードを作成することもできます。
今回のサンプルを使って、「“山田”を含む場合」という条件で、〇を付けるコードを書いていきます。

これ以外にも、数字の以上以下を条件にしたり、ANDを使ったりと、条件式には様々な種類があります。
それぞれの使い方については、別記事をご確認ください。
【デバッグ】ステップインで確認しながら実行
デバッグとは、バグを見つけて修正する作業の事です。初心者のうちは、一行ずつ実行しながらデバッグを行うステップインがおすすめです。
ステップインのやり方
やり方としては「F8」を押すだけです。「F8」を1回押す毎に、コードが一行ずつ実行されます。
エクセルの画面の変化など見比べて、動作が思った通りに行われているかを確認していきます。

変数の確認
知りたい変数の部分にマウスのカーソルを当てると、変数の中身を確認することができます。
For文で今どこの動作を行っているのか、変数が間違って入っていないか等は、マウスのカーソルを合わせることで、確認していきます。

指定の場所までスキップ
指定の場所までスキップする場合は、左の矢印をスキップしたい場所までドラッグします。
この時、変数はスキップする前の状態のままなので、注意が必要です。

デバッグをやめるときは、□(リセット)を押す
上部にある□(リセット)ボタンを押すことで、途中であってもデバッグを終了することができます。

※デバッグの確認ポイントや、他のやり方については、別記事にまとめています。
VBAの実行と注意点
VBAの実行
VBAを実行するときは、開発タブのマクロを選択します。

マクロというウィンドウが出てくるので、実行したいVBAを選択し、実行をクリックすると、VBAが実行されます。

VBAの注意点
①戻るボタンで戻れない
VBAを実行すると、戻るボタンで戻ることができなくなってしまいます。バグが原因でデータが消えてしまっても、戻るボタンでは戻すことができません。
これは、通常の実行でも、デバッグであっても同じですので、VBAを実行するときは必ず保存をするようにしましょう。
②エラーの処理を根気強く行う
プログラミングにエラーはつきものです。やっと完成したと思っても、エラーで動かないことは、よく起こります。ですので、エラーは発生するものという軽い感覚で取り組むのがおすすめです。
こまめにステップインでデバッグを行い、エラーの内容をネットで検索しながら進めていくようにしましょう。
③無限ループに注意
ループ処理では、ゴールの数値の設定ミスなどで、終わることがない無限ループに入ってしまうことがあります。そうなるとエクセルが固まってしまい、最悪強制終了となります。
詳しい対処については、Forループのページで紹介しています。ただループ処理を実行し、処理が終わらない場合、無限ループに入っていないかどうかチェックしましょう。
さいごに
今回紹介した内容をマスターすれば、VBAの処理は一通りできるようになります。ChatGPTを使ってコードを作成する場合、今回紹介した内容があれば修正から実装まで行えるようになると思います。
ChatGPTを使ったコード作成のやり方や注意点なども別の記事で紹介していますので、興味がある方はそちらも参考にしてみてください。
コメント