VBA 基本的な使い方

Tag:

VBAを利用すると日々の作業を効率化するためのツールを作成できます。
ここでは、VBAの使用方法、プロシージャの書き方、変数/定数の書き方を紹介します。

VBAの使用方法
VBAを使用するには、Excelのメニューに「開発」タブを表示させる必要があります。

開発タブ表示手順
操作 画面
1 [ファイル] ⇒ [オプション]を選択
VBA1_1
2 [リボンのユーザ設定]を選択
[開発]にチェックをつける
VBA1_2
3 右のように開発タブが表示されます。
[Visual Basic]をクリックするとVBAでプログラミングができます。
VBA1_3
Function/Sub
プロシージャ(複数の処理を一つにまとめたもの)を作るには、Functionプロシージャで作る方法とSubプロシージャで作る方法があります。Functionプロシージャでは戻り値を設定できます。戻り値を設定したいときは、Functionプロシージャの名前に値を代入します。

Functionプロシージャ、Subプロシージャとも引数を設定できます。引数はデフォルトだと参照渡しされます。また、Optionalキーワードを利用することで引数を省略可能にできます。

以下に使用例を示します。

'呼び出し元
Sub test1()
    result = XXX(5)
    MsgBox result
    
    result = XXX(5, 10)
    MsgBox result
    
    Call YYY("山田")
End Sub


Function XXX(val As Integer, Optional opt As Integer = 2)
    XXX = val + opt
End Function


Sub YYY(name As String)
    MsgBox "Hello " & name
End Sub

test1プロシージャの実行結果

test1プロシージャの実行結果

プロシージャを作る際の雛形
僕がプロシージャを作る際に雛形としているソースです。

Sub test()
On Error GoTo errorproc
    Application.EnableEvents = False   'イベント発生を抑制する
    Application.ScreenUpdating = True  '画面の動きを止める
        
    '############################
    '           処理
    '############################

endproc:
    Application.EnableEvents = True
    Application.ScreenUpdating = False
    Exit Sub
errorproc:
    MsgBox Err.Description & Err.Number
    GoTo endproc
End Sub

雛形ソースでは次のことを行っています。
・エラー処理
・他のイベント処理の発生を抑制
・画面の更新を抑止することで実行速度を高速化

変数/定数
VBAの変数/定数
タイトル 解説
変数宣言
Dim 変数名 As データ型

型指定を省略するとVariant型になります。Variant型の変数にはどんなデータでも格納できます。
なお、モジュールの先頭に Option Explicit と記述した場合、変数の制限は必須となります。

変数の有効範囲
Dim x     '他のモジュールからは利用できない
Public y  'どこからでも利用可能

Sub test()
   Dim z  'このプロシージャ内でのみ利用可能。
End Sub
定数
Const 定数名 As データ型 = 定数値
配列
1. 配列
' 指定方法1
Dim x(3) As Long
x(0) = 69
x(1) = 80
x(2) = 93
x(3) = 74

' 指定方法2
Dim x As Variant
x = Array(69, 80, 93, 74)
2. 動的配列
Dim x() As Long      ' 要素数を指定しない
ReDim x(2)           ' 要素数を変更
x(0) = 69
x(1) = 80
x(2) = 93
ReDim Preserve x(3)  ' 要素数の追加
x(3) = 74
3. 連想配列
Dim x As New Collection
Dim total As Integer
x.Add 69, "国語"
x.Add 80, "数学"
x.Add 93, "英語"
x.Add 74, "社会"
total = x("国語") + x("数学") + x("英語") + x("社会")  'total = 316
静的変数
Sub test()
    Static cnt As Long
    cnt = cnt + 1
    MsgBox cnt
End Sub

Staticステートメントを使うことで静的変数にすることができます。変数cntの値はプロシージャが終了しても保持し続けます。

構造体
Type Student
    Name As String
    Height As Integer
    Weight As Integer
End Type

Sub test()
    Dim x As Student
    x.Name = "山田"
    x.Height = 170
    x.Weight = 60
End Sub
Ifステートメント
If 条件式1 Then
    処理1
ElseIf 条件式2 Then
    処理2
Else
    処理(その他)
End If
Select Caseステートメント
Select Case 判断条件対象
    Case 条件1
        処理1
    Case 条件2
        処理2
              :
    Case Else
        処理(その他)
End Select
For…Nextステートメント
For 変数名 = 初期値 To 最終値
    処理
Next 変数名

増加値の指定↓

For 変数名 = 初期値 To 最終値 Step 増加値
For Each…Nextステートメント
For Each 変数 In オブジェクトの集合
  処理
Next
Do While…Loopステートメント
Do While 条件式
  処理
Loop
withステートメント
With オブジェクト名
    .プロパティ名
    .メソッド名
End With

スポンサーリンク