メモ

備忘録

Javaとか.netとかをちょこっと触っている程度の人用VBA(Excel)メモ

留意点

正確ではないかもしれないが、次のようなイメージだと書きやすいと思われる。

  • Microsoft Excel Object:ワークブック、ワークシートのSingletonなクラス。

  • 標準モジュール:staticなメソッドしか書けないクラス。オブジェクト指向で書く必要がない機能を実装する場合はこれを使う。
  • クラスモジュール:クラス。コンストラクタで引数は取れないとか、インターフェースを実装しても制約はないとか、継承した場合に親クラスのメソッドを呼べないとか、非常に使いづらい。

実装しようとする機能に、データ+振る舞いの多様性が必要であることが設計できない限り、標準モジュール+構造体で書いたほうが楽。


注意点

なんかいろいろと省略できてしまうので、方針を決めて統一する。

個人的にはすべて略さないで書くようにしたい。

・変数宣言が省略できる。

Option Explicit

モジュール・クラスなどに記述する際に行頭にこれを付けないと、変数の宣言は不要となり、すべてVariant型になる。
メニューバーの「ツール」→「オプション」から、「編集」タブの「コードの設定」枠内の「変数の宣言を強制する」チェックボックスにチェックを入れると自動で記述されるようになる。

・変数名が省略できる。

Range("A1") = 1

なんて記述は、

Application.AcitveWorkbook.ActiveSheet.Range("A1").Value = 1

の略。あまり略しすぎると、オブジェクトのイメージが分かりづらくなるし、略さないで書くと長くなる。

・引数を()で囲ったり囲まなかったりする。

x = Left(y, 1)
MsgBox "test", , "テスト"
y = MsgBox("test", vbYesNo, "テスト")
MsgBox "test"
MsgBox ("test")

'エラー MsgBox ("test", , "テスト")

戻り値があるメソッド(Function)を呼び出して、戻り値を利用する場合、()を付ける。
戻り値を利用しない場合、Functionであっても()を付けられない。
ただし、なぜか引数が一つの場合は()を付けることができる。

Callを付ければ、引数に()を付けることができる。

Call MsgBox("test", , "テスト")

・引数が省略できる。
オーバーロードがない代わりにデフォルト値のあるOptionalな引数をたくさん設定して、呼び出す際に取捨選択して使う。

Call MsgBox("test")
Call MsgBox("test", , "テスト")
Call MsgBox("test", Title:="テスト")

「:=」を使えばよいので、これは略してよいと思う。



続きを書くこと。