MS_ExcelVBA - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki
- Excel マクロとも呼ばれる。
- マクロと言うが、画面も追加可能。
- VBA は VB.NET ではなく、旧 VB6 系を使用して書く。
- 以下のような機能を実装可能
- オートメーション
- ユーザー定義関数
- 画面の作成
- アドイン
Excel のオブジェクト モデル(Application / Workbook / Worksheet / Range)を
コードから操作すること。他の Office アプリを操作することもできる。
補足(オートメーションの実務上の注意):
Select/Activateを使わない
マクロ記録が生成するコードはRange.Select→Selection.~の形になるが、
Rangeを直接操作する方が速く、画面のアクティブ状態にも依存しない。- セルへのアクセスをまとめる
セル 1 つずつのループは非常に遅い。Rangeを配列(Variant)に一括で読み込み、
配列上で処理してから一括で書き戻すのが定石。Application.ScreenUpdating = False
再描画を止めるだけで大きく速くなる(処理後に必ずTrueへ戻す)。
標準モジュールに Function を書くと、ワークシート上の数式から呼び出せる。
補足: ワークシート関数として呼ばれた場合、
自セル以外のセルの値を書き換えることはできない(変更は無視される)。
副作用を伴う処理は、ユーザー定義関数ではなく
オートメーションとして実装する。
なお、数式だけでユーザー定義関数を作る LAMBDA 関数が
Microsoft 365 の Excel に追加されており、
簡単なものは VBA を使わずに済むようになっている。
ユーザーフォーム(UserForm)により、VB6 的な入力画面を D&D で作成できる。
- Excel(エクセル)VBA入門:目次
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/index.html
Tags: Microsoft Office, Excel, Visual Basic