PC

入門編!マクロとVBAの違い,書き方や勉強のポイント解説

 

 

Microsoft Officeシリーズを使うと
必ずキーワードの様に出てくるのが

「マクロ」と「VBA」

ですね。

このワードだけで蕁麻疹が出る方も
いらっしゃるかもしれません。

ExcelやWordは使うけれど、

「マクロ」や「VBA」と言う言葉を聞くと

苦手意識を持たれる方が多いのではないでしょうか?

 

この記事では、

その「マクロ」と「VBA」を分かり易く

基礎知識から解説し、

違いを分かって頂いたところで、

「マクロ」や「VBA」の勉強をする時のポイントを

説明してまいります。

 

それでは、

さっそく始めましょう。

 

Contents

マクロとVBAの基礎はコレ!

 

 

 

まずは用語として「マクロ」と「VBA」の意味を
概要から把握しましょう。

マクロ

 

マクロとは、
関連する複数の操作や手順、
命令などを一つにまとめて、
必要な時に呼び出すことが出来るようにする

機能のこと。

これらは、
Microsoft Officeシリーズの
ExcelやWordのことだけでなく、
いろんなITの世界で使う考え方です。

Microsoft Officeシリーズの中でも
Accessを使われる方は
よくご存じだと思いますが、
同じことを繰り返す処理を自動化する時に
よくマクロを使います。

PowerPointもマクロがあって、
プレゼンテーションのフォームを
何度も同じデザインにするときなどに
マクロ機能を使います。

 

簡単に表現すると
「同じ処理を繰り返して行うときの自動化を助ける機能」

言うことになります。

VBA

そして「VBA」は、
「Visual Basic for Application」

いうプログラム言語の略で、
Microsoft社が開発した
Visual Basicという
汎用のプログラム言語を、

OfficeのExcelや
Word、Access、PowerPoint
環境に合わせて
派生させた言語です。

このお陰で、
パソコンにOfficeが入っていれば
簡単にプログラミングが
出来るようになっています。

 

Excelのマクロを表示して
編集にすると
何やら「Sub マクロ名・・・」
いったプログラムで
使う記述を見ることができます。

そうです。
これが「マクロ」を実現する為に
使っている手段で、

Visual BasicをExcel向けに
書きなおしたプログラムです。

「マクロ」が操作を自動かする機能なら

「VBA」はそれを実現する手段と

理解するのが良いでしょう。

 

マクロを一緒に体験してみましょう

 

 

「マクロ」と 「VBA」
混同してしまう要因に、

Excelマクロ・VBAの参考本などが、
「Excel VBAプログラミング」と
名前ついたものが多い為に、

「マクロ」「VBA」も含めた全体の機能を
「VBA」と呼んでいることが、

違いを分かりにくくさせているかも
しれません。

 

説明ばかりでは分かりのにくいので、
Excelを使って「マクロ」を
実際に作って見ましょう。

 

サンプルの図に従って
Excelを操作して行きましょう。

 

 

①マクロを使えるように準備する。

  • 開発タブをクリック。
  • 開発のタブの表示なかったら

「ファイル」
「その他 (Excel2013、Excel2016はオプションから)」
⇒「オプション」
⇒「リボンのユーザー設定」
⇒「開発」にチェックを入れます。

 

 

②マクロを記録する

 

 

  • 開発タブをクリック、

    マクロの記録をクリック、
    マクロの記録の窓が出たら
    「OK」をクリックする。

    これで、操作の記録が始まります。

     

  • セルB2に「1」、

    セルC2に「1」、
    セルD2に「1」を入力して、

    セルE2にB2~D2までを
    集計する計算式
    =SUM(B2:D2)を入れます。

③記録を終了する

 

 

  • 記録終了をクリックする。

    これで、記録が止まります。

    マクロ名は「Macro1」が自動で付いて、
    マクロ名の後ろの数字は連番です。

 

④マクロ「Macro1」を呼び出して実行する

 

 

  • 数字と計算式を入れたセルを

    クリアしましょう。

  • マクロをクリックして

    呼び出して
    実行ボタンをクリックする。

  • クリアしたセルの位置に

    記録した数と計算式を
    入れて計算し直します。

    すると下の様な表になります。

     

 

いかがでしょうか? 

何とこれでマクロは出来上がりです

以外にも簡単ですよね。

 

VBAをいっしょに体験してみよう

 

先ほど記録した「Macro1」を
もう一度
呼び出してみましょう。

今度は編集ボタンをクリックしてみましょう。

 

 

これを見て頂くとお分かりのように、
VBAエディタが開き、

「Visual Basic for Application」
書かれたExcel専用の
プログラムが表示されます。

 

 

この時よく見て頂きたいのが、
左側の「プロジェクトエクスプローラ」と
呼ばれている画面にある

VBAProject(Book1)のツリー図です。

 

ツリー図の下に
「標準モジュール」があり
「Module1」となっています。

 

この「Module1」の中に
「Macro1」が作られているのが
分かると思います。

 

マクロ記録をもう1回実行すると
この「Module1」の中に
「Macro2」が出来ます。

 

VBAのプログラムソースを
見て頂いたら
お分かりになると思いますが、

「Macro1」の実行範囲は、
「Sub Macro1 ~End Sub」 迄です。

 

「Macro1」と「Macro2」を
実行する場合は、

それぞれ別れたものなので
マクロ表示を開いて
マクロ名を選択して
実行することになります。

 

モジュールModuleは、
マクロやVBAを
まとめて保管する箱

みたいなものと覚えておいて下さい。

 

これがマクロとVBAの基礎で
ご説明したVBAプログラムです。

 

マクロが手続きで
VBAが手段であると
分かって頂くことが
できましたでしょうか?

 

要するにマクロは、
VBAプログラム言語で
作られているわけです。

これでVBAとマクロの違いは一目瞭然です。

 

マクロ・VBAの基本をもっと学ぼう

 

 

 

まずは、Excelの特徴から
押さえて行きましょう。

 

Excelの表の基本をおさらいします

 

  • セル(cell)
  • シート(sheet)
  • ブック(book)

 

エクセルを開くと横列に
「A,B,C,D・・・Z・・・XFD」で
16,384列!

縦列「1,2,3,・・・1,048,576」行の
範囲でデータが扱えます。

 

これが「1 sheet」の大きさです。

そして「1 book」は
拡張機能を使えば
9,999sheetまで出来ますが、

通常は1,000sheet迄です。

 

実際に動作できるのは、
パソコン能力にもよりますが、

100sheetくらい迄

ではないでしょうか。

 

VBAプログラムの基本を知ろう

先ほど記録した「Macro1」を
見て頂くとお分かりになると思いますが、

セル(cell)の表現を
Rangeというオブジェクトを
使っています。

 

セルのB2を、
Range(“B2”).Select
と表しています。

 

このRangeは
元々範囲を表すもので、
複数のセルB2~F2なら

Range(“B2″,”F2”)となります。

 

さらに範囲を縦に
3行広げるとすると

Range(“B2″,”F5”)です。

 

いろいろ操作してマクロ記録を使って
どのようにプログラムされているか
確かめるともっと良いでしょう。

 

次のActiveCell.FormulaR1C1
= 1 は

セルB2を選んで
アクティブになったそのセルに
「1」を入れたという意味です。

 

そのアクティブになったセル
(FormulaR1C1)は、

「セルの位置を相対で表しています」
という意味になります。

 

次に計算式を見て見ましょう。

皆さんも良く使う
SUM関数を使っていますが、

SUM(RC[-3]:RC[-1]のように
“E2″から見た
“B2″~”D2″を相対位置で
表しています。

 

Range以外の表現

 

Cells
 

Rangeの表現だと
大きな表になった時に
“A”~”Z”では足りないので

“AA”、”BA”、AAA”など
となって分かり難くなります。

 

ぜひ、Cellsを使った表現を
覚えましょう。

 

セル(cell)のプロパティは、
Cells(行番号,列番号) です。

 

RangeとCellsの
書き方の対比は、
次のようになります。

 

Range(“A1”) : Cells(1,1)

Range(“C5”) : Cells(5,3)

 

※RangeとCellsは
行と列の順番が逆なので
注意しましょう!

 

私は基本的にあまりRangeを
使いませんが、
計算式を入れる、
範囲を指定する時など、
どうしてもと言うときは使います。

 

Rows

Rowsは行全体を表すプロパティで
Rows(行番号)。

 

Columns

Columnsは
列全体を表すプロパティで
Columns(列番号)。

 

Sheet

Sheetsはsheetを表す
プロパティで
Sheets(“シート名”)。

シートを選択するとき
Sheets(“シート名”).Select。

シートのセル(“A1”)を選択するとき
シート名!Cells(1,1)。

 

Book

Bookの操作は
Windowsオブジェクトを使う。

ブックを選択(アクティブ)
にするとき、

Windows(“ブック名.xls”).Activate。

 

他のブックのシートのセル(“A1”)を
選択するときは

[ブック名.xls]シート名!
Cells(1,1)。

 

マクロ(VBA)を編集する

 

 

マクロ(VBA)のプログラムに慣れる為に
「Macro1」のRangeをCellsに置き換えて、

入力数字も「 1 」から「 2 」に変えて見ましょう。

上の図様に「Macro1」の中に続けて
書いてみましょう。

 

マクロ(VBA)を実行する

 

 

実行してみると合計が
「3」から「6」に変わったと思います。

 

それではここで
繰り返し(ループ)処理を
体験しておきましょう。

もう一度「Macro1」の
編集に戻ります。

 

繰り返し処理の方法は、
いろいろありますが、

For Next を使って
プログラミングして行きます。

 

ここでのポイントは、
繰り返す為の回数を数える
変数(項目みたいなもの)を
「Macro1」の中に組み込んでやることです。

 

ここでは「 i 」を回数の変数、
「 j 」を計算値の変数
として定義しました。

また変数などは必ず初期値を
入れておきます。

ここでは「 0 」クリアの意味で
「 0 」を代入しておきます。

答えの違いを見る為に、
入力数字を「 2 」から「 3 」に
変えて下さい。

繰り返しFor nextを組み込んだ
マクロ・VBAを下に示しますので、
真似して編集して見て下さい。

 

 

 

確認できましたら
編集を終わらせて
マクロを実行してください。

合計が「6」から「9」に変わればOKです。

 

マクロ・VBAを実践

 

 

ここからは、
実践に近い例をあげて
解説をしていきます。

 

上の画像の様に、
商品(りんご、みかん、もも、ぶどう、柿)の
「店別売上表」を
Excelマクロ・VBAを使って
自動集計して見ましょう。

売り上げデータは、
件数が少ないですが
1か月集計表の右側に
張り付けてあるとします。

先ほどマクロ・VBAの基礎の段で、
1行3列の合計値を
出すときに合計値の変数を
1つ設定しましたが、

今度は10個の店と5個の変数、
つまり10x5個=50個変数があれば

先ほどと同じ考え方で
作ることが出来るのは?
と気づければすごいですよ。

 

やみくもに
いろいろ読み漁るより
やりたいことの目的を
持って調べることが早く
マクロ・VBAを習得するには大切です。

 

 

ここでは10x5の配列 + 品目計行を
変数として宣言して
作っていきましょう。

 

そして配列の項目の扱える型
(数字タイプか文字タイプなど)を

大きな数字が扱える
長整数タイプ(Long)にします。

配列のインデックスについては、
上手く作るポイントがあって、
マクロ・VBAで定義する
配列のインデックスは
「 0 」から始まりますので、

元々、Excelの表が「 1 」から始まることを
考えると合いませんよね。

そこで、せっかくなので
配列宣言する時に
インデックスの開始番号を
「店別売上表」のセルの位置に
合わせるようにしましょう。

札幌店のりんごの位置は、
D4 なので実績表のはじまりは、
4行の4列からH15 15行の
8列までですね。

 

それでは、配列宣言を4行の4列から
開始にします。

 

入力データインデックス「 i 」については、
「店別売上表」と開始位置が
違っているのでインデックスを
配列のインデックス「 h 」とは分けましょう。

必要なのは店Noの判定、
商品コードの判定で金額の累積ですね。

 

 

この部分は、
Case文を利用しましょう。

 

 

金額には計算式(単価x数量)が
入っていますので、

値のみを取得する
valueプロパティを設定します。

 

 

サンプル入力データは
16行しかありませんが、
最大100件あると
仮定してデータ日付が空白、
もしくはnullだと抜けて集計結果
および総合計を表にセットして
終わるプログラムです。

 

 

ぜひ、試してみて下さい。

 

まとめ

 

 

「マクロ」と「VBA」の違いや
簡単に「マクロとVBA」を使っていく方法は、
いかがだったでしょうか?

 

私も当初Excelを使う機会が少なく
最初はシートの扱いなどが分かりませんでした。

 

Visual Basicの経験が多少あるくらいで、
VBAに対して抵抗感がなかった程度です。

 

しかし分からなかったところは、
似たような操作を
マクロ記録を使って記録をして、
書き方を覚えるというやり方を
実践してきました。

習うよりより慣れろという
感じでしょうか。

 

マクロ記録という機能は、
欲しいソースコードを
すぐ見ることが出来るというメリットが
とても便利ですね。

 

またネット上でも「マクロ・VBA」サンプル集が
最近は数多く投稿されているので
ぜひ利用しましょう。

 

知りたいことが
はっきり分かれば探すことも早くなり、
すぐに実務で使えるようになります。

 

 

Excelの「マクロとVBA」の
勉強ポイントを
まとめました。

  1. Excelのルーチン作業をマクロ記録させる。
  2. 記録からソースコードを確認する。
  3. セルの表現をCellsに書き換える。
  4. 計算式などの関数は相対位置表現から

    絶対位置表現に変える。

  5. VBAの流れが分からい時や変数の中身を

    確認するときは、MsgBoxを利用する。

 

MsgBoxは、サンプルVBAの
最後にMsgBox (終わり)を
参考にしてください。

 

マクロ・VBAは、
やって見れば意外と簡単ですので
挑戦して行きましょう。