はじめに

只の VBA 入門向けあんちょこである、それなりに他の言語のプログラムを書きつつ VBA をほぼ書かない人間が構文を思い出す程度のメモである。 プログラムを教えてくれとの要望対応として自身のあやふやな知識の修正と初学者への説明を助ける為に用意した。 内容には何かしらの勘違いがあるかもしれない、より正しく学習をするなら以下のサイトを参照を。

VBA を嫌いで堪らないのに止む無くまとめた故に入門に向いてないかもしれないがご容赦を。 検索したらいいやんとか思ったのは秘密である。 とりあえず私に VBA の仕事を振らないでもらいたい。

にゃ~ん

この記事より高度な事をやりたい場合、 私は xlwings をお勧めしている。

VBA の開発を有効化する

以下は Excel2010 の例である。 (手元ではサブスクリプション契約しているので最新が使えるのだが...)

Excelオプション.png

ExcelVBA開発.png

VBA を記述していく

vbe.png

twb.png

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 の分岐

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 のループ

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

Like 演算子

VBA の変数

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 の型

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 が付記できる。

その他の型

Variant について

 型 リテラル 説明
Object オブジェクト型
Nothing Nothing オブジェクト型の初期値
Variant なんでも入る型
Empty Empty 組み込み型の初期値
  • Empty -- 右辺の時あらゆる組込型の初期値になる
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account log in.