サイトについて      連絡先   検索

VBA 入門、基礎のまとめ

はじめに

Excel VBA の実行の仕方から変数や関数の作成、For 文 IF 文などの構文、エラー処理やデバッグ方法まで、基礎的なことをすべてまとめています。

VBA が初めての方も、他のプログラミング言語を経験している方も、このページを見れば VBA がどういうものかわかります。

バージョン 2010 以降に対応しています。・2007 へ2003 へ

VBA コードの作成

[開発] タブをクリックして [Visual Basic] をクリックします。

開発タブが表示されていないときは、先に「使い方」をご覧ください。
50

プロジェクト ウィンドウからワークシートや標準モジュールなど、コードを書きたいファイルをダブルクリックします。

[挿入] タブから標準モジュールなどを追加できます。

51

Sub 関数を作成し、そこに処理を入力していきます。関数については後述します。

52

Sub 関数が VBA で最初に実行される場所になります。

マクロの記録

「マクロの記録」機能を使うと Excel の操作を自動で VBA のコードに変換してくれます。

[開発] タブをクリックして [マクロの記録] をクリックします。

54

マクロ名などを必要があれば変更し [OK] をクリックします。

55

ここから Excel に対して行った操作が記録されます。セルに文字と数値を入力します。

56

マクロの記録を終了するときは、[記録終了] をクリックします。

57

標準モジュールに VBA のコードが出力されます。この方法でも Sub 関数が作成されます。

58

マクロとは、この機能で作成した処理や Sub 関数のことです。

VBA・マクロの実行

上記の方法で作成した VBA やマクロを実行する方法を紹介します。VBA の関数またはマクロを選択して実行できます。

VBE から実行する

実行したい関数をクリックします。ここでは Tips 関数をクリックします。キャレットがある関数が実行される関数です。

59

F5キーを入力して実行できます。またはツールバーから [実行] ボタンをクリックするか、[実行] をクリックして [Sub/ユーザーフォームの実行] をクリックします。

60

これで Tips 関数が実行されます。

マクロを選択して実行する

関数以外の場所をクリックした状態で実行するか

61

[関数] タブの [マクロ] をクリックします。

62

マクロを選択する画面が表示されます。

実行したい [マクロ] をダブルクリックするか、クリックして [実行] をクリックします。

ここに表示されるマクロとは VBA の Sub 関数と「マクロを記録」で作成したマクロです。
63

選択したマクロが実行されます。

標準モジュールに注意

VBA やマクロを実行したときに、どのワークシートに対して処理が行われるか注意してください。

次のコードはセル「A1」に Tipsfound を入力するコードです。では、どのワークシートのセルでしょうか。


Sub 実行()
    Range("A1").Value = "Tipsfound"
End Sub

Sheet1 に書かれたコードなら、必ず Sheet1 の A1 のセルです。

標準モジュールに書かれたコードなら、Excel で選択中のワークシートのセルに対して行われます。

64

標準モジュールで Sheet1 のセルに入力したいときは、次のようにワークシートを指定します。


Sub 実行()
    Sheets(1).Range("A1").Value = "Tipsfound"        ' 1 番目のワークシート
    Sheets("Sheet1").Range("A1").Value = "Tipsfound" ' Sheet1 という名前のワークシート
End Sub

ボタンから実行する

[開発] タブをクリックし、[挿入] をクリックして ActiveX コントロールの [コマンド ボタン] をクリックします。

65

ドラッグしてボタンを貼り付けます。

41

ボタンをダブルクリックします。自動で Sub 関数が作成されます。ここに処理を入力します。

66

ツールバーの [デザイン モードの終了] をクリックします。

67

ボタンをクリックすると、入力した処理が実行されます。

44

コンパイル

コンパイルするとコードに間違いがあるときにエラーで教えてくれます。

VBA コード全体の構文チェックを行います。一度コンパイルすると、コードを編集するまでコンパイルできません。

VBE の「デバッグ」をクリックして [VBAProject のコンパイル] をクリックします。

68

VBA を実行すると、処理が行われるコードは自動でコンパイルされます。

デバッグの仕方

デバッグするとコードがどのように動作しているか確認できます。

コードの左側の部分をクリックします。

71

コードを実行すると、ブレークポイントを設定した行で処理が止まります。

72

マウスで変数の上にカーソルを合わせると、この時点で変数に入っている値を表示できます。

73

処理を先に進めるには [デバッグ] をクリックして [ステップ イン] などをクリックします。F5キーを入力すると最後まで実行されます。

74

関数の作成

関数は処理を 1 つにまとめられます。

Sub 関数:戻り値を返さない


Sub 関数名()
    ' ここに処理を記載
End Sub

Function 関数:戻り値を返す


Function 関数名() As String
    ' ここに処理を記載
    関数名 = "これが戻り値"
End Function

関数の呼び出し


Sub 関数名()
    ' Sub 関数の呼び出し
    SubMethod      ' 関数名をそのまま書く
    Call SubMethod ' Call の後に関数名を書く(どちらも同じです。こちらをおすすめ)
    
    ' Function 関数の呼び出し
    Dim s As String
    s = FuncMethod ' 関数名を値の用に使います。
End Sub

Sub SubMethod()
    
End Sub

Function FuncMethod() As String
    FuncMethod = "戻り値"
End Function

変数の宣言

Dim が変数を宣言するキーワードです。変数名の後ろに型を指定します。


Dim 変数 As String

変数の値を何度も変更できるため、変数と呼びます。


Dim 変数 As String
変数 = "Tips"
変数 = "Found"

変数の宣言と初期化は一行にできません。


Dim 変数 As String = "Tips" ' これはできません。

Dim 変数 As String
変数 = "Tips"

Object 型 (参照型) の代入には Set を付けます。Worksheet などのクラスが Object 型です。


Dim 変数 As Object
Set 変数 = Range("A1")

定数

Const が定数を宣言するキーワードです。宣言と同時に値を指定します。


Const 定数名 As Integer = 100

定数の値は変更できません。


Const 定数名 As Integer = 100
定数名 = 200 ' これはできません。

スコープ

関数や変数を参照可能な範囲です。Public、Private、Dim があります。


' 全てのシートや標準モジュールから参照可能
Public found1 As String

' このコードを記載しているシートや標準モジュール内で参照可能
Private found2 As String

' スコープを省略した関数は Public になります。
Sub Tips 
    ' Tips 関数内でのみ参照可能
    Dim found3 As String

    ' Sheet1 の変数 Public found1 As String を他のシートなどから参照するには
    found3 = Sheet1.found1
    
    ' 標準モジュール の変数 Public found1 As String を他のシートなどから参照するには
    found3 = found1
End Sub

まとめると次のようになります。

配列

静的配列

宣言後に配列の要素数を変更できません。


' 静的(0 ~ 3) の 4 つの要素数を持ちます。
Dim 静的(3) As Integer

' 静的(1 ~ 3) の 3 つの要素数を持ちます。
Dim 静的(1 To 3) As Integer

動的配列

宣言後に配列の要素数を変更できます。


' まだ要素数はありません。
Dim 動的() As Integer

' 他の配列を変数にいれられます。
Dim tips(3) As Integer
動的 = tips

' 配列の要素数を変更
Redim Preserve 動的(3) ' Dim tips(3) As Integer と要素数が同じになります。

配列操作


Dim tips(3) As Integer
Dim i As Integer
i = UBound(tips) ' 配列の最大インデックスを返します。 i = 3
i = LBound(tips) ' 配列の最小インデックスを返します。 i = 0

' UBound などはループの値に使用できます。
For i = LBound(tips) To UBound(tips)
    ' i の値が 0 ~ 3 まで変化します。
Next

コメント

' を付けた後ろがコメントになります。


Sub Tips()
    ' コメントです。
    Dim found As String ' ここからコメントです。
End Sub

データ型

VBA には次のような基本的な型があります。

型名 データ型 値の例や範囲
String文字列型"文字列"
Booleanブール型True または False
Byteバイト型0 ~ 255 の正の整数
Integer整数型-32,768 ~ 32,767 の整数
Long長整数型-2,147,483,648 ~ 2,147,483,647 の整数
Single単精度浮動小数点型負:-3.402823E38 ~ -1.401298E-45
正:1.401298E-45 ~ 3.402823E38
Double倍精度浮動小数点型負:-1.79769313486231E308 ~ -4.94065645841247E-324
正:4.94065645841247E-324 ~ 1.79769313486232E308
Currency通貨型-922,337,203,685,477.5808 ~ 922,337,203,685,477.5807
Date日付型西暦100年1月1日 ~ 西暦9999年12月31日 の日付と時刻
Objectオブジェクト型オブジェクト参照するデータ型 (Worksheet やクラスなど)
Variantバリアント型なんでも (多様は禁物)
Typeユーザー定義型Type で定義した型、いわゆる構造体

Integer などの数値型には文字列を入れられません。自動で変換されることはあります。

演算子

算術演算子

演算子 演算名 使用例 結果
+足し算1 + 23
-引き算2 - 11
*掛け算2 * 36
/割り算7 / 23.5
\割り算の商7 \ 23
Mod割り算の余り7 Mod 21
^べき乗2 ^ 38
&文字結合"Tips" & "found""Tipsfound"

比較演算子

演算子 演算名 使用例 結果
=等しい1 = 2False
<>等しくない1 <> 2True
>大きい1 > 2False
<小さい1 < 2True
>=以上1 >= 2False
<=以下1 <= 2True

オブジェクトを比較する演算子

演算子 演算名 使用例 結果
Is参照が等しいSheets(1) Is NothingFalse

論理演算子

演算子 演算名 使用例 結果
And論理積True And True
True And False
False And False
True
False
False
Or論理和True Or True
True Or False
False Or False
True
True
False
Not論理否定Not True
Not False
False
True
Xor排他的論理和True Xor True
True Xor False
False Xor False
False
True
False

For 文

処理を繰り返すときに使用します。

For To

配列にインデックスを使用して操作するときなどに使用します。


Dim i As Integer
Dim list(3) As Integer
For i = 0 To 3 ' i の値が 0 ~ 3 まで変化します。
    list(i) = 10
Next

For Each

コレクションの全ての要素を操作できます。


Dim cell As Object
For Each cell In Range("A1", "A3")
    ' セル A1 ~ A3 に "A" を設定します。
    cell.Value = "A"
Next

If 文

条件が一致したときに If の中のコードが実行されます。


Dim i As Integer
i = 0

If i = 0 Then
    ' ここが実行されます。
End If

条件が一致しないときは Else の中のコードが実行されます。


Dim i As Integer
i = 0

If i = 2 Then
    ' 実行されません。
Else
    ' ここが実行されます。
End If

複数の条件があるときは ElseIf を使用します。ElseIf はいくらでも追加できます。


Dim i As Integer
i = 0

If i = 1 Then
    ' 実行されません。
ElseIf i = 2 Then
    ' 実行されません。
ElseIf i = 0 Then
    ' ここが実行されます。
Else
    ' 実行されません。
End If

Select 文

条件が複数あるときは Select 文を使用すると可読性があがります。


Dim i As Integer
i = 0

Select Case i
    Case 1
        ' 実行されません。
    Case 0
        ' ここが実行されます。
    Case Else
        ' 実行されません。
End Select

With 文

同じオブジェクトを何度も参照するときは With 文を使用してオブジェクト名を省略できます。

コードの高速化も少しだけ期待できます。

通常のコード


' 通常のコード
Dim cell As Range
Set cell = Range("A1")
cell.Value = "あ"
cell.Font.Color = RGB(255, 0, 0)
cell.Interior.Color = RGB(255, 255, 0)

With を使ったコード


Dim cell As Range
Set cell = Range("A1")
With cell
    .Value = "あ"
    .Font.Color = RGB(255, 0, 0)
    .Interior.Color = RGB(255, 255, 0)
End With

イベント

プロジェクト ウィンドウからイベントを取得したいワークシートまたは ThisWorkbook をダブルクリックします。

17

(General) をクリックして [Worksheet] をクリックします。

18

(Declarations) をクリックして取得したいイベントを選択します。

19

イベントが発生したときに作成されたコードが実行されます。

20

構造体

Type が構造体を宣言するキーワードです。

関連する値をまとめるときに使用します。


' 関数の外で宣言します。
Private Type Size
    Width As Integer
    Height As Integer
End Type

Sub Tips
    ' 初期化
    Dim s As Size
    s.Width = 100
    s.Height = 200
End Sub

標準モジュール

標準モジュールに書いたコードは他の標準モジュールやワークシートから参照できます。同じ関数を使いまわしたいときに、標準モジュールを使用します。

標準モジュールの追加

VBE の「挿入」をクリックして [標準モジュール] をクリックします。

70

標準モジュールが追加されます。

22

コードの参照


' Public で宣言したものは他の標準モジュールやシートから参照できます。
Public Tips As String
Public Sub Found
    
End Sub

クラス

プログラミングを始めたばかりの方には、理解しづらいものです。最初は無理に使う必要はありません。理解できると大変便利なものです。

Worksheets や Range 型のように、値と関数をまとめたオブジェクトが必要なときに使用します。

クラスの追加

VBE の「挿入」をクリックして [クラス モジュール] をクリックします。

69

クラスが追加されます。

24

定義

変数や関数などワークシートや標準モジュールと同じように宣言できます。


Public FirstName As String
Public LastName As String

Public Function MyName() As String
    MyName = FirstName & LastName
End Function

使用例

クラスを使用するには必ず New を使用してインスタンス化する必要があります。クラスは Object 型なので代入には Set を使用します。


Sub Tips
    ' インスタンス化
    Dim c As クラス名
    Set c = New クラス名

    ' 初期化
    c.FirstName = "Tips"
    c.LastName = "found"

    ' 関数の呼び出し
    Dim userName As String
    userName = c.MyName 
    Debug.Print(userName) ' "Tipsfound"
End Sub

エラー処理

プログラミングではエラーが必ず発生します。故意に発生するエラーもあれば、予想外のエラーもあります。

On Error Resume Next

エラーの発生を無視して処理を続行します。


Sub Tips
On Error Resume Next

    Dim list(2) As Integer
    Dim num As Integer
    
    num = list(3) ' インデックスエラーが発生する。このエラーが無視される。

    Debug.Print (num) ' ここからの処理も行われる num の値は 0 のまま変化なし
End Sub

On Error Go To

エラーが発生したときに指定の行ラベルへ移動します。

行ラベルは ラベル名: のように : を後ろに付けます。


Sub Tips
On Error GoTo Cacth ' エラーが発生したら Cacth へ移動する

    Dim list(2) As Integer
    Dim num As Integer

    num = list(3) ' インデックスエラーが発生する

    Debug.Print (num) ' ここからの処理は実行されない
    Exit Sub ' エラーが発生ないとき Cacth 以降の処理を行わないように、ここで処理を抜ける

Cacth: ' エラーが発生したらここから処理を続行する
    Err.Description ' ここでエラー処理を行う
End Sub

ヘルプ

インストール

Excel をインストール時にヘルプもインストールされています。最新の Excel ではヘルプがオンライン上にあります。

ヘルプの表示

わからないキーワードがあればそこをクリックして F1 キーを入力します。

30

そのキーワードのヘルプが表示されます。

31
Tipsfound ではキーワードや関数を数多く解説していますので、そちらをご覧になると理解が深まると思います。

関連ページ