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

IT

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

スポンサーリンク

VBAを何に使う?

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

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

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

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

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

    開発タブの表示

    マクロの編集・作成には開発タブを使いますが、これはExcelの初期設定では非表示になっています。
    ですので、まず開発タブの表示方法から始めたいと思います。

    Excelのバージョンが2010以降の場合

    まずファイルタブをクリックし、
    ファイルメニューが開くので、オプションをクリックします。
    Excelのオプションダイアログが開くので、リボンのユーザー設定タブ開発にチェックを付けてOKを押します。

    Excelのバージョンが2007の場合

    OfficeボタンExcelのオプションをクリックし、
    ユーザー設定マクロの表示をクリック→追加OKで「マクロの表示」をツールバーに追加できます。

    マクロ編集のショートカットの作成

    必須ではないですが、画面左上にマクロ一覧を表示するショートカットを追加することもできます。よく使うようでしたらどうぞ。

    Excelのバージョンが2010以降の場合

    開発タブの表示と同じ動線でExcelのオプションダイアログを開き、クイックアクセスツールバーマクロの表示を見付けてクリック→追加OKとクリックします。

    Excelのバージョンが2007の場合

    OfficeボタンExcelのオプション基本設定タブ「開発」タブをリボンに表示するにチェックしてOKを押します。

    マクロ一覧の起動方法

    (追加してれば)①画面左上のショートカットをクリックするか、
    開発タブ「マクロの表示」をクリック、
    あるいは③表示タブマクロをクリック、
    マクロ一覧の表示
    Alt+F8
    もしくは④ショートカットを押すことで、マクロ一覧を表示できます。

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

    VBAの編集

    では、マクロ画面を開いて、実際に編集してみましょう。

    編集画面を開く

    上記いずれかの操作を実行すると、
    マクロ一覧が起動します。
    最初からある「macro1」を選択した状態で編集をクリックすると、VBAを入力/編集するウィンドウ(VBE)が起動します。
    ここにプログラム(VBA)を書いていきます。
    マクロに好きな名前(今回は「macro1」としてます)を入力して、作成をクリックします。
    日本語でもOKです。

    マクロの編集、実行

    ' vba
    Sub macro1()
    Range("A1").Value = "Hello World!"
    End Sub
    Sub macro1()の下の行から、End Subの間がコードを書く部分です。
    まずはこのコードを書くか、コピペしてみましょう。
    内容的には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
    プロシージャの中で他のプロシージャを呼び出すこともできます(式はイメージです)。
    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!で上書きすることが可能です。 ただし、マクロで実行した処理は、「元に戻す」ボタンを押しても実行前に戻すことができません。マクロの内容に不安がある場合は、あらかじめバックアップなどをとっておくほうが安全です。

    関数

    もうひとつ簡単なコードを書いてみましょう。さっきよりちょっとシンプルです。
    Sub macro1()
    MsgBox "Hello World!"
    End Sub
    このコードを書くか、コピペしてみてください。 ちなみにMsgBoxやValueなどVBAで使う言葉は、小文字でmsgboxのように書いてもOKです(自動で修正されます)。 ""の中の文字はそのまま表示されるので、大文字小文字書き分けてください。
    実行して次のように表示されれば成功です。
    MsgBox "Hello World!"
    MsgBoxは「メッセージを表示」して「その結果を取得する」という関数で、プロパティとちがい=を使いません。オブジェクトは省略されていますが、正式に書くとApplication.MsgBoxとなります。

    マクロが記録されたExcelファイルが開かれていれば、他のExcelファイルでもマクロを実行することが可能です。ひとつひとつのファイルにコピーする必要はありません。

    スポンサーリンク

    マクロを記録する方法

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

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

    記録されるのはクリックやキー操作の内容のみで、かかった時間は計測されません。思う存分ゆっくりやって大丈夫です。
    ためしにA1のHello World!を消してEnterし、B1に「Deleted A1」と殺し屋のメッセージみたいなのを書いてもう一回Enter押して「記録終了」を押しました。

    この状態でマクロを開くと、先ほど作ったマクロが追加されています。

    開くと、行った動作がVBAに変換されて記録されていることがわかります。

    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を修正することになります。

    相対参照で記録

    スポンサーリンク

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

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

    開発タブを有効化していない状態でもxlsmを開くことは可能ですが、マクロの中には悪意のある挙動をするものもあるため、インターネットから落としたxlsmなどを不用意に実行しないようマクロの実行にストップがかかっていることがあります。
    もし「マクロ●●を実行できません。このブックでマクロが使用できないか、またはすべてのマクロが無効になっている可能性があります。」といった表示が出るときは、ファイル→オプション→セキュリティセンター→セキュリティセンターの設定→マクロの設定→「警告を表示してすべてのマクロを無効にする」を選択します。

    この状態でExcelを再起動するとセル上部にセキュリティの警告が表示されますので、「このコンテンツを有効にする」を選択すると、マクロの実行が可能になります。もしMicrosoft Officeセキュリティオプション画面が開いた場合は、「このコンテンツを有効にする」にチェックを付けてOKを押してください。
    2003以前では、ツール→マクロ→セキュリティでセキュリティレベルを「中」にすれば実行可能かと思います。ファイルを開く際にセキュリティ警告が出る場合は、「マクロを有効にする」をクリックしてください。

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

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

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

    コメント

    モバイルバージョンを終了