Visual Basicとはプログラミング言語のひとつで、これをアプリケーション(=ソフト。ここではExcelのことですが、wordなどでも使えます)で使えるように組み込んだもののことです。
Visual Basicにfor Applicationsを付けて、通称VBAです。
またこれを編集する画面のことを、Visual Basic Editor = VBEと呼びます。
VBAを何に使う?
Excelではマクロを動かすのに使用します。
マクロ (英: macro) は「大きい」「巨大な」といったような意味の語であるが、コンピュータ関係では、アプリケーションソフトウェアなどの操作などといった、プログラミング言語と比較して粒度が大きい操作をまとめて自動化したりする機能を指して良く使われる。マクロを記述するコンピュータ言語をマクロ言語と言う(言語の無いマクロ機能もある)。また、テキスト等の変換を記述する変換言語もマクロと呼ばれる。
引用 – Wikipedia
つまり操作の一元化、自動化のことです。VBAとマクロは混同されがちですが、マクロは「自動操作」のことで、マクロを作っている言語がVBAです。
関数だけではまかないきれない処理を担当し、具体的に言うと、例えば次のようなことができます。
また、メリットとして次のような点があげられます。
細かい説明は後回しにして、まずは一度VBAを書いてマクロを動かしてみたいと思います。よろしければお付き合いください。
開発タブの表示
ですので、まず開発タブの表示方法から始めたいと思います。
Excelのバージョンが2010以降の場合
Excelのバージョンが2007の場合
マクロ編集のショートカットの作成
Excelのバージョンが2010以降の場合
Excelのバージョンが2007の場合
マクロ一覧の起動方法
Alt+F8
なお、2002/2003の場合は、Visual Basicツールバーの「マクロの実行」をクリックすると起動できます。
VBAの編集
では、マクロ画面を開いて、実際に編集してみましょう。
編集画面を開く
ここにプログラム(VBA)を書いていきます。
日本語でもOKです。
マクロの編集、実行
' vba
Sub macro1()
Range("A1").Value = "Hello World!"
End Sub
まずはこのコードを書くか、コピペしてみましょう。
内容的にはA1セルに文字を入力するマクロです。
コードの解説
今書いたVBAには次のような意味があります。
Sub macro1()
' vba
Sub プロシージャ名
処理内容
End Sub
Subの後にプロシージャの名前をつけ、マクロ一覧でそのプロシージャ名を選択して実行すると、プロシージャの内容、つまりマクロが実行されます。
' vba
Sub 通勤
If today = 平日 Then
私.歩く("家" to "駅")
切符を買う
電車に乗る
私.歩く("駅" to "会社")
Else
私.寝る(to 昼)
End If
End Sub
Sub 切符を買う
私.払う(通勤費)
私.取る(切符)
End Sub
Sub マクロテスト()
必要に応じてマクロを増やし、名前をつけていくことで、用途に応じた使い分け、機能ごとの切り分けが可能になります。
オブジェクトとプロパティ
Range("A1").Value = "Hello World!"
ここではRange(範囲)オブジェクトに対して命令を行います。
Range("A1").Value = "Hello World!"
Range("A1").Value = "Hello World!"
プロパティの後に「=」を付けて、なんらかの値を記述することで、プロパティにその値を代入することができます。
Range("A1").Value = "Hello World!"
End Sub
関数
MsgBox "Hello World!"
End Sub
MsgBox "Hello World!"
マクロが記録されたExcelファイルが開かれていれば、他のExcelファイルでもマクロを実行することが可能です。ひとつひとつのファイルにコピーする必要はありません。
マクロを記録する方法
VBAを記録する以外にも、マクロを作成する方法はあります。Excel上での動作を記録することです。
この方法を使うと、VBAを一切打たずにプログラムを作ることも可能です。
記録されるのはクリックやキー操作の内容のみで、かかった時間は計測されません。思う存分ゆっくりやって大丈夫です。
ためしに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以降:ファイルタブ→「情報」をクリック→「コンテンツの有効化」をクリック→「すべてのコンテンツを有効にする」をクリック
コメント