はじめに
只の VBA 入門向けあんちょこである、それなりに他の言語のプログラムを書きつつ VBA をほぼ書かない人間が構文を思い出す程度のメモである。 プログラムを教えてくれとの要望対応として自身のあやふやな知識の修正と初学者への説明を助ける為に用意した。 内容には何かしらの勘違いがあるかもしれない、より正しく学習をするなら以下のサイトを参照を。
VBA を嫌いで堪らないのに止む無くまとめた故に入門に向いてないかもしれないがご容赦を。 検索したらいいやんとか思ったのは秘密である。 とりあえず私に VBA の仕事を振らないでもらいたい。
にゃ~ん
この記事より高度な事をやりたい場合、 私は xlwings をお勧めしている。
VBA の開発を有効化する
以下は Excel2010 の例である。 (手元ではサブスクリプション契約しているので最新が使えるのだが...)
VBA を記述していく
VBA の関数
Sub プロシージャを作成する / Function プロシージャを作成する / Sub プロシージャと Function プロシージャの呼び出し / コードでかっこを使用する / 同じ名前のプロシージャを呼び出す / 名前付き引数と省略可能な引数について / 引数を効率的に渡す / パラメーター配列について
' 注釈
Sub Start()
' 返り値を使わない場合の呼び出し方
Subプロシージャ名 引数名:=引数, ...
Call Subプロシージャ名(引数名:=引数, ...)
Funcプロシージャ名 引数名:=引数, ...)
Call Funcプロシージャ名(引数名:=引数, ...)
' 返り値を使う場合の呼び出し方
変数 = Funcプロシージャ名(引数名:=引数, ...)
End Sub
Sub Subプロシージャ名(受け渡し種別 引数名 as 引数の型, ...)
' Exit Sub で脱出可能
End Sub
Function Funcプロシージャ名(受け渡し種別 引数名 as 引数の型, ...) as 戻り値の型
' Exit Function で脱出可能
Funcプロシージャ名 = 戻り値
End Function
-
引数名:=
/as 引数の型
/as 戻り値の型
/関数名 = 戻り値
は省略可能である。 -
受け渡し種別
... ByVal, ByRef, Optional が指定出来る、また省略可能である。
VBA の分岐
If...Then...Else ステートメントを使用する / Select Case ステートメントの使用
If 式 Then
ElseIf 式 ' 省略可能
Else ' 省略可能
End If
Select Case 式
Case 値, ...
Case 最小値 To 最大値
Case Is 演算子 式
Case Else ' 省略可能
End Select
GoTo ラベル
ラベル:
VBA のループ
For...Next ステートメントを使用する / Do...Loop ステートメントを使用する / For Each...Next ステートメントを使用する
For 変数名 as 型 = 式 To 式 Step 式 ' as 型 / Step 式 は省略可能
' Exit For で脱出可能
Next 変数名
Do While 式
' Exit Do で脱出可能
Loop
Do
Loop While 式
Do Until 式
' Exit Do で脱出可能
Loop
Do
Loop Until 式
For Each 変数 in イテレータ
Next 変数
VBA の演算
VBA の演算を緩く説明
比較演算子 / Eqv 演算子 / Imp 演算子
単項演算 | 正 | 負 | 優先順位変更 |
---|---|---|---|
+x | -x | (式) |
二項演算 | 加算 | 減算 | 乗算 | 浮動除算 | 整数除算/商 | 剰余 | べき乗 |
---|---|---|---|---|---|---|---|
x + y | x - y | x * y | x / y | x \ y | x Mod y | x ^ y |
比較演算 | 小なりLT | 小なりイコールLE | 大なりGT | 大なりイコールGE | 等号 | 否定 |
---|---|---|---|---|---|---|
x < y | x <= y | x > y | x >= y | x = y | x <> y |
- x < y < z のような記述は出来ない
ビット毎論理演算 | 論理否定 | 論理積 | 論理和 | 排他的 | 論理同値 | 論理包含 |
---|---|---|---|---|---|---|
Not x | x And y | x Or y | x Xor y | x Eqv y | x Imp y |
文字列演算 | 連結 | パターンマッチ |
---|---|---|
x & y | x Like y |
VBA の変数
宣言ステートメントを作成する / 代入ステートメントを作成する / 変数を宣言する / 配列を宣言する / 定数を宣言する / オブジェクト変数を作成する / Visual Basic の名前指定の規則 / スコープと可視性について / 変数の有効期間について
小規模な範疇であれば次で良い。
Const 変数名 = 初期値 '定数
' 変数を使いたいところで変数をただ表記するだけで良い
変数名 = なにか
Set オブジェクト変数名 = なにか
規模の大きいケースはら明示的にすると良いだろう。
Option Explicit '宣言の必須化
公開範囲 Const 変数名 as 型名 = 初期値, ... '定数
公開範囲 Const 変数名型修飾子 = 初期値, ... '定数
公開範囲 Dim 変数名 as 型名, ...
公開範囲 Dim 変数名(サイズ) as 型名, ... '固定長配列 変数名(1 To 3) とも 指定可能
公開範囲 Dim 変数名(サイズ,...) as 型名, ... '多次元固定長配列
公開範囲 Dim 変数名() as 型名, ... '可変長配列
公開範囲 Dim 変数名 as String * 10 '固定長文字列
- 宣言しなくとも変数を使う事が出来る、その場合は Variant 型になる。
- 公開範囲 -- Public, Private 省略可能である、プロシージャ内では指定出来ない。
-
as 型名
-- 型修飾文字にする事が出来る、省略した場合は Variant 型になる。
VBA の型
データ型の概要 / データ型を効率的に使用する / VarType 関数
値型
型 | リテラル | 説明 |
---|---|---|
Boolean | True False | 論理値 |
Byte | 無し | 8ビット符号付き整数 |
Integer | 数値% | 16ビット符号付き整数 |
Long | 数値& | 32ビット符号付き整数 |
Single | 数値! | 単精度浮動小数 |
Double | 数値# | 倍精度浮動小数 |
Decimal | 無し | 10進 |
Currency | 数値@ | 通貨 |
String | "文字列" | |
Date | #YYYY/MM/DD# もしくは #YYYY/MM/DD HH:MM:SS# | 日時 |
- 整数数値には 16進数指定:
&H
8進数指定:&0
が付記できる。
その他の型
型 | リテラル | 説明 |
---|---|---|
Object | オブジェクト型 | |
Nothing | Nothing | オブジェクト型の初期値 |
Variant | なんでも入る型 | |
Empty | Empty | 組み込み型の初期値 |
- Empty -- 右辺の時あらゆる組込型の初期値になる