ゆんの業務改善ブログ

①生産性向上 ②業務改善 ③自動化 について情報発信しています。VBAプログラムは本当の初心者から他のアプリケーションを呼び出して使う上級者的な使い方まで幅広いレベルで解説していきます。

VBA 初心者が最初に押さえるべき文法10選

VBAは非エンジニアの事務職プログラミング経験がゼロの人でも取り組みやすい言語です。一方で、取り組みやすいと言ってもどこから手をつければ良いのかわからない人もいるのではないでしょうか。今回は始めに押さえておくべき10個の文法を紹介します。これだけでもかなりのことができる様になります。
f:id:mutable_yun:20191129000303j:plain

目次

VBA 初心者が最初に押さえるべき文法10選

VBAは非エンジニアの事務職の方がちょっとした自動化などの便利ツールを気軽に作るのにうってつけのプログラミング言語です。簡単に始められる一方で、極めようと思えば奥が深く相当いろいろな事ができるという初心者から上級者まで幅広く学ぶ余地がある言語であるとも言えます。

この記事では、VBAの初心者が手っ取り早く便利ツールが作れるようになるための最低限押さえておくべき文法を10個絞り込んで紹介します。この記事で紹介した文法をマスターすれば相当なツールが作れるようになります。ここで紹介する文法をマスターしたら、ひとつのツールを仕上げてしまいましょう。その後、使い勝手の向上や高速化を目指して使える文法の幅を広げていくとスムーズに上達していく事ができます。

変数と定数

プログラミングを行うに際し不可欠なのが変数です。定数は始めて作成する便利ツールには不要かも知れませんが、ゆくゆくレベルアップしていく段階では必要となりますので、セットで覚えてしまいましょう。

1.変数と定数

変数はよく箱に例えられますが、ここではメモのようなモノだと言う説明をしたいと思います。電話が掛かってきて、何かを説明されたら、要点をメモしますよね。そして用が済んだらそのメモは捨ててしまいます。このように一時的に値を保存しておいて後で使う為のメモが変数です。

一方、定数は変数と似ており、後で使う為に用意するものです。こちらはメモではなく、備忘のためのフセンです。例えば、パソコンを開いたらまずメールのチェックを忘れずに行うように、ラップトップPCのカバーの部分に貼っておくフセンのようなモノです。毎回同じ事をするので書き換えることがない点がメモと異なる点で、これが変数と定数の違いに当たります。

演算子

演算とは計算をすることです。演算子とは演算を表す記号のことです。

2.算術演算子

VBAで覚えるべき算術演算子は6つです。

  • +:和を求める。足し算。
  • -:差を求める。引き算。
  • *:積を求める。かけ算。
  • /:商を求める。割り算。
  • Mod:剰余を求める。割り算の余り。
  • ^:べき乗をする。

Modがなじみがないかも知れませんが、これは余りを求める計算です。エクセルのワークシートではModは関数ですが、VBAでは演算子です。割り算で/と書く代わりにModと書けば、余りが求められる、と理解しておけばOKです。下のサンプルを見て確認して下さい。MsgBoxに答えを表示させます。

Sub 算術演算子サンプル()
    
    MsgBox 7 + 3    '10
    MsgBox 7 - 3    '4
    MsgBox 7 * 3    '21
    MsgBox 7 / 3    ' 2.33333333333333
    MsgBox 7 Mod 3  '1
    MsgBox 7 ^ 3    '343
    
End Sub

シングルクォテーションでコメントした部分がメッセージボックスで表示される部分です。足し算、引き算、かけ算、割り残はOKですね。Mod演算子の部分は7÷3 = 2余り1なので、余りの1が出力されます。^はキャップと読みます。7 ^ 3は7 × 7 × 7 = 343で343が出力されます。

3.比較演算子

比較演算子はふたつの値を比較した結果を返します。後に紹介する条件分岐の条件の部分でよく使います。戻り値はTrueまたはFalseと言う特別な値です。具体的に見てみます。

Sub 比較演算子サンプル()
    
    MsgBox 7 > 3    'True
    MsgBox 7 >= 3   'True
    MsgBox 7 < 3    'False
    MsgBox 7 <= 3   'False
    MsgBox 7 = 3    'False
    MsgBox 7 <> 3    'True
    
End Sub

小学校で習った不等号と同じです。真であればTrue、偽であればFalseが返ります。また、以上、以下を表す不等号はイコールが右側に来る、と覚えておきましょう。将来、VBA以外のプログラミング勉強する事になった時も、以上、以下のイコールは右側です。

<>は等しくないと言う意味です。<または>、と言うことは等しくないときに成り立つ、と考えれば覚えやすいでしょう。

繰り返し

VBAによる自動化ツール作成で避けては通れないのが繰り返しです。簡単な文法なのでさっさと理解してしまいましょう。

4.For~Nextステートメント

VBAには繰り返しをする為の文法は2つありますが、先に覚えるべき構文としてFor~Nextステートメントを紹介します。VBAにおいては、ステートメントとはプログラムの流れをコントロールするキーワード、と言う意味です。

For ~ Nextは For とNextで囲んだ部分を繰り返すというステートメントで、変数とセットで使います。具体的なサンプルを見てみましょう。

Sub 繰り返しサンプル()

    For i = 1 To 5
        MsgBox i & "回目"
    Next i
    
End Sub

i は変数です。唐突に出てくる始めで出てくる文字列が変数であると認識されます。この記事の一番最後に変数をきちんと変数として宣言する方法説明します。

このサンプルコードでは変数iに1をまず代入し、For~Nextの中が実行され、次にiに2が代入され、For~Nextの中が実行され・・と言う具合にコードが実行されていきます。Toの後に5と書かれているので5まで代入します。VBEの画面でF8を押すと一行ずつプログラムを実行して共同を確認することができるので是非、試してみましょう。

5回表示されるメッセージボックスの1回目
実行結果。メッセージボックスが5回繰り返して表示される。

<関連記事>

条件分岐

ある程度複雑な事を行うようになれば条件分岐が必須です。条件分岐ではもしAだったら、Bを行うと言うような書き方をします。ここでは条件分岐の基本である、If~End If文を紹介します。

5.If ~ End If

If ~ End IfはIfの後にTrue、もしくはFalseをあたえます。そして、Ifの後がFalseでなければIf とEnd Ifの中身が実行されます。

Sub 条件分岐サンプル()
        
    If True Then
        MsgBox "Trueです"
    End If
    
End Sub

Ifのうしろの条件式が成り立っている
実行結果。Ifの中身が実行された。
Ifの後がTrueとなっているので、その中身のMsgBoxを表示させる命令が実行されました。

比較演算子のところで2つの値を比較して真であればTrue、偽であればFalseが変える事を勉強しました。これをIfの後の部分に使います。

Sub 条件分岐サンプル2()
        
    If 7 > 3 Then
        MsgBox "7は3より大きいです"
    End If
    
End Sub

無事に実行されました。不等号を逆向きにするとIf ~ End Ifの中身は実行されません。Ifの後の部分を条件式と言います。条件式の値がTrueの場合、ThenからEnd Subの中身が実行されます。If文はバリエーションがあり、End Ifを使わずに1行で表現する方法もあるのですが、この方法は条件式の値がTrueの時の命令がひとつしか書けないのと、後から見たときに見づらいのでオススメしません。よってここでは紹介しません。

<関連記事>

オブジェクト

オブジェクトとはいろいろな機能を持ったモノのことです。エクセルには様々なオブジェクトが用意されていますが、まずはワークブック、シート、レンジを覚えておけばOKです。

6.Workbooks、Sheets、Range

オブジェクトの中でもsをつけて複数形になっているものをコレクションと言います。コレクションとは集まりのことです。沢山ある集まりのうち、Aというワークブック、Bというシート、と言った具合です。

7.プロパティ

実はプロパティとこの次の項で説明するメソッドというのは、初めのうちは詳しく分けて理解する必要はありません。しかし、将来的な事を考えてプロパティとはどういうことなのか、メソッドとはどういうことなのかと言う事をざっくりと把握しておくのが良いでしょう。

プロパティとはそのオブジェクトの状態を表すパラメータです。パラメータとは、設定できる値のことです。たとえば、シートの名前、列の幅、セルの背景の色と言った様なものです。

簡単な例を挙げます。

Sub オブジェクト_プロパティ()

    Range("A1").Value = "Hello"
    
End Sub

これでA1セルにHelloと入力されます。これはRangeと言うオブジェクトのうち、A1で表される部分のValue、つまり値をHelloにする、と言う意味です。VBAは空気を読んでくれるプログラミング言語なので、Valueを省略すると、エクセルが「Valueを省略したんだろうな」と推測して同じ結果にしてくれます。

Sub オブジェクト_プロパティ2()

    Range("A1") = "Hello"  '.Valueを省略しても同じ結果となる
    
End Sub
8.メソッド

メソッドとはオブジェクトに備えられた機能のことです。オブジェクトごとに様々な機能が備えられています。例えばワークシートにはワークシートを追加する、という機能があります。

Sub オブジェクト_メソッド()

    Sheets.Add
    
End Sub

これでシートを追加する事ができます。よくVBAの解説で誤った解説を見かけます。それはSheetsをAddするからSheets.Addと記述する、と言う解説です。これは間違っています。SheetsがもっているAddと言う機能を使う、というのが正しいです。

ステートメント

ステートメントとはプログラムの流れを制御する文です。プログラムは上から順に一行ずつ実行されるのが基本ですが、それ以外の動作を行うときに記述するのがステートメントだと言えます*1。すでに出てきたFor~Nextステートメントもステートメントです。繰り返しの部分が流れを制御した結果のためです。

9.Callsステートメント

とても小さなプログラムでは不要ですが、少しでもボリュームが出てくると、機能と処理の流れを分離してプログラミングを行うのが合理的な場面が出てきます。その時、機能の塊を作っておき、それを呼び出す事によって、プログラムの流れを分かりやすく事ができます。プログラムを呼び出すのがCallステートメントです。

10.Dimステートメント

一番始めの項で変数の説明をしました。始めてプログラムの中に出てくるキーワードではない文字列が変数として認識されるという説明をしましたが、「この文字列を変数として使います」という宣言を行う事も可能です。こうすることによって、何を変数として使うかが明確になるというメリットがあります。

変数は宣言しなくてもプログラミングが可能ですが、プログラムの規模が大きくなると宣言をしておいた方が結局自分が助かることになるでしょう。

さらに上を目指す方法

以上、簡潔にVBAを学ぶに当たって最初に身に付けるべき10の文法を紹介してきました。プログラミングの勉強は網羅的に文法を学ぶより、必要最低限を学んだらとりあえず実際に書いてみる、アウトプットをしてみると言うことが非常に大切です。その中でうまくいかないことやできないことが出てくるので、その都度調べて知識と技術を拡張していくのが最短の上他鬱方法といえます。この記事では、アウトプットを出すために必要な最小限の文法を紹介しました。

紹介するに止まっており、身に付けられるほど詳しい解説ができていません。それぞれについて詳しい解説を書いていますし、上達のステップも示していますので、ぜひ下の関連記事を参考にしてレベルアップしていきましょう!

<関連記事>

*1:Withはプログラムの流れを制御するわけではありませんが、ステートメントと呼ばれています