はじめに
VBA (Visual Basic for Applications) でコーディングするために最低限覚えておきたい項目をまとめてみました。VBAをたまーにしか使わないとか、VBA以外の何かの言語は使えるけどVBAは初めて、という人のための時間の節約になればいいかな、と思います。
ぶっちゃけ自分向けのまとめです(いつも忘れるので汗)。
どうやって利用するの?
用途としては10分くらいでななめ読みして、いざ実装する時に基本構文をコピペで使えるようなリファレンスになればいいなと思っています。
前提(というか言い訳)
この記事では、基本以下の縛りというか、いいわけがあります。
- Excel VBA に特化した内容になっています
- 実装する上で最低限の知識に限定しています
- Excel 2010以降くらいで動けばいいかなと思います
1.Excel VBA に特化した内容になっています
あとで少し触れようと思いますが、この記事の内容はExcel VBAに特化したものです。Access VBAに関する内容ではありません(もちろん共通して使える部分も多いですが)。
2.実装する上で最低限の知識に限定しています
「Excel VBAでちょっとしたツールを作るために必要な情報」を最低限のレベルでまとめたので、必ずしも最善の記述方法ではないだろうし、Excel VBAの全ての機能を網羅しているわけではありません。
どの言語でもそうですが、最善を追求し始めると際限がなくなるので「割と適当なところで手を打つ」というのがこの記事のスタンスです。
なので、例えばExcel VBAではクラスを作成することもできるのですが、社内のちょっとしたツールレベルでクラスの設計まで必要な実装ってあんまり必要ないと思うので、ここでは取り上げていません。
4.Excel 2010以降くらいで動けばいいかなと思います
エクセル自体がバージョンアップするように、Excel VBAもバージョンアップしています。もちろん、基本概念や基礎構文の変更はない(はず)なので、ここで書いている内容はほとんどのバージョンに対応していると思うのですが、もしかしたら古いエクセルのバージョンでは動かなかったりするかもしれません。
なので、とりあえずExcel 2010以降で使えるような内容にしています。
VBA (Visual Basic for Applications)とは?
VBAって何?という問いに関しては、他に優秀な記事がたくさんあるので、ここでは私の独断と偏見から、VBAを使う前に知っておきたい超基本概念を書いておくだけにします。
とりあえず、VBAはMicrosoft ExcelやOutlookをプログラムによって自動化するためにマイクロソフトが開発したプログラミング言語、くらいの理解で良いと思います。
なので、ひとくちにVBAといってもエクセル用のVBAだったり、Word用のVBAだったり、Officeのアプリケーション毎にいろんな種類があります。
代表的なのがこの記事で対象にしているExcel VBAとAccess VBAです。
ただ、どのVBAでもIF文とかFor文とかの基本構文は同じだし、エディタの使い方もほとんど似たようなもんだと思います。違う所と言えば、アプリケーション毎に特有のモノだけだと思います。
分かりやすい例で言うと、エクセルではエクセル特有の概念であるセルを扱うためにCellsというオブジェクトがありますが、Accessでは「セル」という概念がないのでそんなオブジェクトは使えません。
Google検索する時は「Excel VBA」を入れる
上で書いた通り、VBAといっても色んな種類があるので、何か実装につまづいてGoogleで検索する時はなるべく「Excel VBA」というキーワードを入れるようにしましょう。
間違ってAccess VBA用の情報にたどり着いてしまったら時間の無駄になってしまいます。
私がよく参考にするサイト
実装に困ったとき、私がよく参考にするサイトをあげておきます。別に私が紹介しなくても、普通にGoogle検索すれば検索上位に出てくるはずなので、見たことがある人も多いと思います。
エディタの立ち上げ(Alt + F11)と初期設定
エディタの立ち上げ
VBAを記述するためのエディタをVBE (Visual Basic Editor)と呼びます。
VBEはAlt + F11で起動します。
エクセルのメニューからも起動できますが、エクセルのバージョンによってデフォルトのメニュー構成では起動できなかったりメニューの名前が異なったりしていて迷うことが多いので、「Alt +F11」だけ覚えるようにしましょう。
構文エラーの時にポップアップを出さない設定
たぶん、デフォルトでは書いたVBAコードに文法エラーがあると、ポップアップが出て煩わしいです。
これを抑制しましょう。
抑制すると言っても、ポップアップが出ないようにするだけで、文法エラーの部分はちゃんと赤文字で示されるので支障はないと思います。まあ、最初は設定をいじらずにやってみて、ポップアップが煩わしかったら抑制する、というスタンスでも大丈夫だと思います。
コードを書く場所は基本的に「標準モジュール」
VBAのコードを書く場所は、基本的に「標準モジュール」で良いと思います。ただ、まっさらなエクセルの場合、VBEを開いた直後は標準モジュールが追加されていないので、以下のようにして標準モジュールを追加します。
左側のプロジェクト内のファイル一覧のところで、適当に右クリック→挿入→標準モジュールと選択。
すると、以下のように「Module1」というファイルが作成されます。
「Module1」というモジュール名を変更したいのですが、それをするには以下のようにプロパティウィンドウを表示する必要があります。これは知らないと結構ハマります。
デバッグの開始(F5)
デバッグの開始方法はF5と覚えても良いし、最悪メニューを見れば分かるので大丈夫だと思います。一点、覚えておきたいのは、「デバッグはカーソルがある行の関数の先頭から始まる」点です。
他の開発環境ではあまり見られない独特なスタイルなんじゃないかな、と思います。
ただ、実際にVBAで何かを作る場合は自分でボタンのようなものを作って、それに特定の関数を関連付けることになると思います。そんな場合はブレイクポイントを張るだけでOKです。
コメント文
コメントはシングルクォート「’」のみで、行単位のみです。
つまり、/* */ や <!– –>で複数行をコメントアウトすることはできません。
基礎構文と制御構文
基本の制御構文をまとめました。
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' IF文
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim row As Integer
Dim name As String
If (age = 1 _
And name = "Hanako") Then
Debug.Print "age is 1, name is Hanago"
ElseIf (age = 2 _
And name = "Hiroshi") Then
Debug.Print "age is 2, name is Hiroshi"
Else
' do nothing
End If
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' For文
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim i As Integer
For i = 0 To 9
Debug.Print "Hello!"
Next i
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' While文
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim count As Integer
count = 0
While (count < 5)
Debug.Print count ' 0 1 2 3 4
count = count + 1
Wend
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Do While文
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Do While はあまり使ったことがないので省略しました、、、すみません
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Select (switch)文
''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Dim score As Integer
score = 100
Select Case score
Case 100
Debug.Print "Perfect!!"
Case Is > 90
Debug.Print "Excellent!"
Case Else
Debug.Print "Good Job."
End Select
' Case句では色んな書き方ができます
Case 100 ' 100に等しい
Case Is >= 80 ' 80以上
Case 50 To 79, 20 To 49 ' 50 - 79 あるいは 20 - 49
Case Is < 20 ' 20より小さい
Case "Hanako" ' 文字列で一致させる場合はダブルクォーテーションで囲む
関数の定義と呼び出し
準備中
よくある実装パターン
準備中
コメント