「VBAを始めたけど、難しそうで途中でやめてしまった…」
「参考書を買っても、途中でコードの意味がわからなくなって諦めた…」
もしあなたがそう感じたことがあるなら、安心してください。それは決して、あなたがプログラミングの才能がないからではありません。
プログラミングの基礎の「核」となる部分の理解が、少し足りていなかっただけです。
この記事ではEXCELプログラミングを誰にでもわかりやすく解説します。
この記事を書いているのは、【Excel問題解決Lab.】筆者「16時間」を「5秒処理」化。 Excelユーザー歴25年の経歴を持つ筆者が解説。過去には、事務員さんの年間約192時間の工数削減を実現。削減できた時間は、より付加価値の高い分析業務に充てられるようになり、社内の生産性向上と業務省力化に貢献。
Excel VBAプログラミングの目的はただ一つ、「日々の面倒な作業をコンピューターにやらせること」です。
今回は、その目的を達成するための、プログラミングの真髄とも言える2つの基礎技術を、挫折しないように徹底的に解説します。これさえマスターすれば、あなたのExcel作業は劇的に変わります!
挫折ポイントを乗り越える2大要素
「オブジェクト、プロパティ、ステートメント」など聞きなれない用語や規則で、意味が解らなくなり多くの方が挫折していきます。その原因は周りに教えてくれる方がいないからなのです。「セルを操作する方法」や、「変数」でデータを一時的に保存する方法などと聞いても教えてくれる方がいなければプログラミングのトンネル出口は見えてきません。
EXCELプログラミングとは、「もし〇〇なら、この処理をしなさい」「この作業を100回繰り返しなさい」というコンピュータへの指示を可能にすることなのです。
多くの人が挫折するのは、この「判断」と「反復」の概念でつまづいてしまい、解決策について周りに聞く人がいないからなのです。
-
基礎1:コンピュータに「判断」させる(条件分岐)
-
基礎2:コンピュータに「反復」させる(繰り返し処理)
この2つを紐解いていきましょう。
基礎1:コンピュータに「判断」させる(If文)
「条件分岐」とは、文字通り、特定の「条件」に応じて処理を分けることです。VBAでは、主に If ステートメントを使います。
If文の基本構文
If 条件式 Then
‘ 条件が True(真)だった場合に実行する処理
Else
‘ 条件が False(偽)だった場合に実行する処理
End If
実践的な例:「合格/不合格」を自動判定
例えば、B列の点数が80点以上なら「合格」、そうでなければ「不合格」とC列に入力するマクロを考えます。(簡単にするため、ここではA1セルを対象とします)
Sub JudgeResult()
Dim score As Integer
score = Range(“B1”).Value ‘ B1セルの点数を変数scoreに入れる
‘ もしscoreが80以上なら…
If score >= 80 Then
Range(“C1”).Value = “合格” ‘ C1に「合格」と入力
Else
Range(“C1”).Value = “不合格” ‘ C1に「不合格」と入力
End If
End Sub
コードの解説
Sub JudgeResult() ’subから始まるマクロの名前
Dim score As Integer ’Dim(ディム)は変数の宣言です。ここでは 「score」という変数を使いますよ(As Integer → 文字列として)と宣言しています。
score = Range(“B1”).Value ‘ B1セルの点数を変数scoreに入れる
‘ もしscoreが80以上なら…
If score >= 80 Then
Range(“C1”).Value = “合格” ‘ C1に「合格」と入力
Else
Range(“C1”).Value = “不合格” ‘ C1に「不合格」と入力
End IfEnd Sub
ポイント:比較演算子
If文で使う「条件」は、比較演算子を使って書かれます。
-
=(等しい) -
>(より大きい) -
<(より小さい) -
>=(以上) -
<=(以下) -
<>(等しくない)
基礎2:コンピュータに「反復」させる(For Next文)
繰り返し処理は、VBAが最も威力を発揮する部分です。100行、1000行あるデータに対して、同じ処理を何度も手動で行うのは時間の無駄です。For Next 文を使えば、この反復作業を一瞬で終わらせることができます。
For Next文の基本構文
For カウンタ変数 = 開始値 To 終了値
‘ 繰り返したい処理(カウンタ変数が1ずつ増えながら繰り返される)
Next カウンタ変数
践的な例:全行のデータに同じ処理を適用
A列の1行目から10行目まで、すべてに「処理済み」という文字を自動入力するマクロを考えます。
Sub RepeatProcess()
Dim i As Integer ‘ カウンタ変数(繰り返し回数を数える箱)
‘ i の値を 1 から 10 まで、1ずつ増やしながら繰り返す
For i = 1 To 10
‘ i を使ってセルの行番号を可変にする
‘ i=1の時はA1、i=2の時はA2、… と指定できる!
Cells(i, 1).Value = “処理済み”
Next i ‘ iを1増やして、Forに戻る
MsgBox “10行分の処理が完了しました!”
End Sub
ポイント:Cells(i, 1)
Cells(行番号, 列番号) という指定方法は、For Next文と組み合わせて、行番号を i にすることで、繰り返し処理を行う際に非常に役立ちます。
まとめ:自動化の核は「判断」と「反復」
今回の記事で、あなたはVBAプログラミングにおける2つの最も強力なツールを手に入れました。
| ツール | 機能 | 構文 |
| If文 | 条件によって処理を判断する | If 条件 Then ... End If |
| For Next文 | 特定の処理を何度も反復する | For i = 1 To N ... Next i |
自動化は、これらの要素を組み合わせることで成立します。
例えば、「For Nextで100行繰り返しながら、それぞれの行でIfを使って点数をチェックし、合否に応じてセルの色を変える」といった複雑な処理も、この2つがあれば実現可能です。
まずは、上記の簡単なコードをVBEにコピー&ペーストして実行し、For i = 1 To 10 の 10 を 20 に変えてみるなど、自分で結果を試してみることから始めてみましょう。
小さな成功体験を積み重ねれば、もう挫折することはありません。あなたの自動化への道は、ここから本格的にスタートです!

