ExcelでVBA(Visual Basic for Applications)を使う方法/マクロを記録する方法、そもそもVBAとは何か?

IT

Visual Basicとはプログラミング言語のひとつで、これをアプリケーション(=ソフト。ここではExcelのことですが、wordなどでも使えます)で使えるように組み込んだもののことです。
Visual Basicにfor Applicationsを付けて、通称VBAです。
またこれを編集する画面のことを、Visual Basic Editor = VBEと呼びます。

Advertisements

VBAを何に使う?

Excelではマクロを動かすのに使用します。

マクロ (英: macro) は「大きい」「巨大な」といったような意味の語であるが、コンピュータ関係では、アプリケーションソフトウェアなどの操作などといった、プログラミング言語と比較して粒度が大きい操作をまとめて自動化したりする機能を指して良く使われる。マクロを記述するコンピュータ言語をマクロ言語と言う(言語の無いマクロ機能もある)。また、テキスト等の変換を記述する変換言語もマクロと呼ばれる。
引用 – Wikipedia

つまり操作の一元化、自動化のことです。VBAとマクロは混同されがちですが、マクロは「自動操作」のことで、マクロを作っている言語がVBAです。
関数だけではまかないきれない処理を担当し、具体的に言うと、例えば次のようなことができます。

  • 入力した数値を自動で表やグラフに直し、サイズや設定を整える
  • シートの一部のみ入力内容をクリアして、次の入力をする準備を整える
  • 作ったデータを保存、印刷し、バックアップを作成する
  • リストに乗っているアドレスに一括でメールを送ったり、ブログに投稿したりできる
  • また、メリットとして次のような点があげられます。

  • 同じ操作を何度も繰り返す必要がない
  • 複雑な操作を正確に実行できる
  • 目的に合わせて機能をある程度自作できる
  • 物理的に時間のかかる操作(印刷など)も自動化できる
  • 細かい説明は後回しにして、まずは一度VBAを書いてマクロを動かしてみたいと思います。よろしければお付き合いください。

    マクロ作成の準備

    kaihatsu5
    まず最初に、開発タブ(+マクロ一覧のショートカット)を表示したいと思います。
    もし既に表示されているのであれば、マクロ一覧の起動方法まで読み飛ばしてください。
    kaihatsu1
    まずOfficeボタンExcelのオプション(2010以降ではファイルタブオプション)をクリックし、
    kaihatsu2
    ユーザー設定マクロの表示をクリック→追加で「マクロの表示」をツールバーに追加します。
    macrob2
    さらに基本設定タブ「開発」タブをリボンに表示するをチェックします(2010以降ではリボンのユーザー設定→右側にある開発タブにチェック)。

    マクロ一覧の起動方法

    kaihatsu3
    画面上部にショートカットが現れるので、①これをクリックするか、
    macrob1
    開発タブ「マクロの表示」をクリック、
    macrob3
    あるいは③表示タブマクロをクリック、
    マクロ一覧の表示
    Alt+F8
    もしくは④ショートカットを押すことで、マクロ一覧を表示できます。

    なお、2002/2003の場合は、Visual Basicツールバーの「マクロの実行」をクリックすると起動できます。

    VBAの編集

    では、マクロ画面を開いてみましょう。

    macro1
    上記いずれかの操作を実行すると、
    macro2
    マクロ一覧が起動します。
    macro3
    最初からある「macro1」を選択した状態で編集をクリックすると、VBAを入力/編集するウィンドウ(VBE)が起動します。
    ここにプログラム(VBA)を書いていきます。
    macroc1
    もしなければマクロ名に「macro1」と入力して、作成をクリックします。
    名前はなんでもいいんですが、後の説明のために今回は統一します。
    Sub macro1()
    Range(“A1”).Value = “Hello World!”
    End Sub
    Sub macro1()の下の行から、End Subの間がコードを書く部分です。
    まずはこのコードを書くか、コピペしてみましょう。
    内容的にはA1セルに文字を入力するマクロです。
    macro4
    入力できたら実行ボタンをクリックします。
    macrob4
    もし何かちがう場合、エラーダイアログが出ます(エラー表記はちがう可能性があります)。
    macrob5
    文字が黄色くなったり赤くなったり違うところを強調したりするので、参考にしつつリセットボタンを押します。
    macrob6
    ちがうところを見付けて修正してください。
    A1
    正しく書けていれば、マクロが実行され、A1セルに文字が追加されます。

    プロシージャ

    今書いたVBAには次のような意味があります。

    Sub macro1()
    マクロは複数作ることができて、それぞれ自由に名前をつけることができます。ここではこの下の処理を「macro1」と呼ぶ、という宣言をしています。
    ' vba
    Sub プロシージャ名
    処理内容
    End Sub
    SubとEnd Subで囲われた範囲をプロシージャと呼び、ほぼマクロと同じ意味です。
    Subの後にプロシージャの名前をつけ、マクロ一覧でそのプロシージャ名を選択して実行すると、プロシージャの内容、つまりマクロが実行されます。
    ' vba
    Sub 通勤
    If today = 平日 Then
    私.歩く("家" to "駅")
    切符を買う
    電車に乗る
    私.歩く("駅" to "会社")
    Else
    私.寝る(to 昼)
    End If
    End Sub
    
    Sub 切符を買う
    私.払う(通勤費)
    私.取る(切符)
    End Sub
    プロシージャの中で他のプロシージャを呼び出すこともできます(式はイメージです)。
    プロシージャには他にもFunctionプロシージャ、Propertyプロシージャがあるそうですが、Excelのマクロで呼び出されるのはSubなので、あまりそのへんは気にしなくてよいです。
    Sub マクロテスト()
    プロシージャ名(マクロ名)を変更したい場合は、式内で書き変えればOKです。日本語も使えます。
    必要に応じてマクロを増やし、名前をつけていくことで、用途に応じた使い分け、機能ごとの切り分けが可能になります。

    オブジェクトとプロパティ

    Range("A1").Value = "Hello World!"
    VBAにおいてなんらかの命令を下す対象(主語)をオブジェクトと呼びます。たとえばExcelにメッセージを表示させる、セルに色をつける等、命令を下す場合はに対して行うかを明確化する必用があります。
    ここではRange(範囲)オブジェクトに対して命令を行います。
    Range("A1").Value = "Hello World!"
    ちょっとややこしい話になるので詳細は割愛しますが、Range(“A1”)のように書くことで、「A1セルをセットしたRangeオブジェクト」を命令の対象に指定することができます。関数同様、A1:C1のように書くこともできます。
    Range("A1").Value = "Hello World!"
    A1セルには内容、位置、書式などさまざまな属性(プロパティ)があります。オブジェクトプロパティ「.」でつなぐことにより、「何の」「どんな属性」を指定するかを選ぶことができます。
    プロパティの後に「=」を付けて、なんらかの値を記述することで、プロパティにその値を代入することができます。
    Range("A1").Value = "Hello World!"
    ここでは、A1セルの書いてある内容(Valueプロパティ)に対して「Hello Wolrd!」という文字を代入する(=内容を入力する)ことを指定しています。
    End Sub
    マクロはSub マクロ名()~End Subでワンセットとなります。つまりこのマクロがここで終わりということを示しています。
    A1に何が表示されていても、このマクロを実行することでHello World!で上書きすることが可能です。 ただし、マクロで実行した処理は、「元に戻す」ボタンを押しても実行前に戻すことができません。マクロの内容に不安がある場合は、あらかじめバックアップなどをとっておくほうが安全です。

    メソッド

    method1
    もうひとつ簡単なコードを書いてみましょう。さっきよりちょっとシンプルです。
    Sub macro1()
    MsgBox "Hello World!"
    End Sub
    このコードを書くか、コピペしてみてください。 ちなみにMsgBoxやValueなどVBAで使う言葉は、小文字でmsgboxのように書いてもOKです(自動で修正されます)。 ""の中の文字はそのまま表示されるので、大文字小文字書き分けてください。
    method2
    実行して次のように表示されれば成功です。
    MsgBox "Hello World!"
    MsgBoxは「メッセージを表示する」という命令で、プロパティとちがい=を使いません。オブジェクトは省略されていますが、正式に書くとApplication.MsgBoxとなります。
    イメージとしては、プロパティは「保存する値」です。セルの内容は何かに保存する必要がありますので、何かとしてValueプロパティを用意し、それに代入します。
    MsgBoxの値は一度実行されれば破棄してOKなものです。いわばプロパティが形容詞で、今回のは動詞です。
    こうした命令をメソッドと呼びます。

    あまり気にしないでも使えますが、慣れてきたら意識すると理解しやすいかと思います。メソッドやプロパティにはすさまじい量がありますので、とりあえず必要なものから覚えていくと吉です。
    これらのマクロが記録されたExcelファイルと同時に開いたExcelファイルでも、このマクロを実行することが可能です。ひとつひとつのファイルにコピーする必要はありません。セル1つなら自分でやったほうが早いと思われるでしょうが、表の作成なども上の処理の延長線上で自動化することが可能です。

    Advertisements

    マクロを記録する方法

    VBAを記録する以外にも、マクロを作成する方法はあります。Excel上での動作を記録することです。
    この方法を使うと、VBAを一切打たずにプログラムを作ることも可能です。

    macro5
    マクロを記録するには、①開発タブ「マクロの記録」を選択するか、
    rcdmcr
    表示タブマクロマクロの記録をクリックします。
    macro6
    するとダイアログが開くので、好きな名前を付けて「OK」を押します。このOKを押した瞬間から記録スタートです。

    記録されるのはクリックやキー操作の内容のみで、かかった時間は計測されません。思う存分ゆっくりやって大丈夫です。
    ためしにA1のHello World!を消してEnterし、B1に「Deleted A1」と殺し屋のメッセージみたいなのを書いてもう一回Enter押して「記録終了」を押しました。
    macro7
    この状態でマクロを開くと、先ほど作ったマクロが追加されています。
    macro8
    開くと、行った動作がVBAに変換されて記録されていることがわかります。
    macro9
    Selection.ClearContents ←現在選択しているセルの内容をクリアしています。
    Range("A2").Select ←Enterキーを押していますが、VBAでは「A2を選択する」という形で記録されています。
    Activecell.FormulaR1C1 = "Deleted A1" ←さきほどのValueとは違う命令ですが、「Deleted A1」を選択中のセルに入力しています。
    このマクロを動かせば同様の挙動が得られます。もし「この操作はVBAでどう書いたらいいのだろうか」という場面があっても、実際に自分で実行し、そのコードを見ることで知識を得ることが可能です。

    ただし上のコードには、最初にA1のセルを選んでいないという欠点があります。つまりマクロを実行した時点で選択しているセルの文字を消してからA2へ移動するので、もしA1のHello World!を消去するのが目的の場合は、最初にRange("A1").Selectを追加してあげる必要があります。
    効率的なコードを組み、必要に応じて微調整を行うためにも、記録だけではなく多少なりともVBAの知識があるほうが望ましいです。
    なお、記録中に失敗した場合は最初からやり直すか、あとでVBAを修正することになります。

    Advertisements

    VBAを使ったExcelファイルの保存、開き方

    マクロを作ったVBAは、通常のxlsx形式等ではなく、xlsm形式で保存する必要があります。

    開発タブを有効化していない状態でもxlsmを開くことは可能ですが、マクロの中には悪意のある挙動をするものもあるため、インターネットから落としたxlsmなどを不用意に実行しないようマクロの実行にストップがかかっていることがあります。
    もし「マクロ●●を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。」といった表示が出るときは、ファイル→オプション→セキュリティセンター→セキュリティセンターの設定→マクロの設定→「警告を表示してすべてのマクロを無効にする」を選択します。
    securitymacro
    この状態でExcelを再起動するとセル上部にセキュリティの警告が表示されますので、「このコンテンツを有効にする」を選択すると、マクロの実行が可能になります。もしMicrosoft Officeセキュリティオプション画面が開いた場合は、「このコンテンツを有効にする」にチェックを付けてOKを押してください。
    2003以前では、ツール→マクロ→セキュリティでセキュリティレベルを「中」にすれば実行可能かと思います。ファイルを開く際にセキュリティ警告が出る場合は、「マクロを有効にする」をクリックしてください。

    セキュリティの警告を×ボタンでキャンセルしてしまった場合

    Excel2007:表示タブ→「メッセージバー」にチェックを付ける
    Excel2010以降:ファイルタブ→「情報」をクリック→「コンテンツの有効化」をクリック→「すべてのコンテンツを有効にする」をクリック

    やりたいことから方法を探すエクセルExcel操作・関数・VBA(マクロ)逆引きまとめ
    逆引き(やりたいことから探す)Excel記事まとめ

    コメント