初心者向けにやさしく、たっぷり例題と実践的な説明を出します。読みやすく段階を追って進めますね。コードはそのままVBAエディタに貼って試せます。
目的
VBAの「データ型」と「変数宣言」を初心者向けにかみ砕いて解説します。
終わりには練習問題(解答あり)と、実際に試す手順も載せます。
1. そもそも「変数」とは?
プログラム内で値を一時的に入れておく「箱」のこと。箱には中身(数値・文字列・日付など)があり、箱の種類(データ型)を決めておくと安全で速く動きます。
例:名前を入れる箱 → 文字列(String)型
年齢を入れる箱 → 整数(Integer / Long)型
2. よく使う基本データ型(かんたん解説)
- String:文字列(例
"Hello","山田太郎") - Integer:小さめの整数(約 −32,768 ~ 32,767)
- Long:大きめの整数(約 −2,147,483,648 ~ 2,147,483,647) — 整数は通常 Long を使うのが無難。
- Single / Double:小数(Single: 単精度、Double: 倍精度。小数は Double が一般的)
- Boolean:真偽(
True/False) - Date:日付・時刻(例
#2025/10/17#や"2025/10/17") - Variant:何でも入る型(指定しないとこれになる) — 柔軟だが遅く、バグの元になりやすい。
- Object:シートやレンジなどオブジェクトを入れる箱(例
Worksheet、Range)
3. 変数の宣言方法(基本)
Dim 変数名 As データ型
VB例:
Dim name As String
Dim age As Integer
Dim price As Double
Dim isOk As Boolean
VB型を省略すると Variant になります:
Dim x ' x は Variant 型
VB4. なぜ型を指定したほうが良いのか?(理由)
- エラーを早く見つけられる:違う型を代入するとエラーになるのでバグに気づきやすい。
- 処理が速くなる:VBAは型が決まっていると効率良く動く。
- 読みやすいコードになる:他人(未来の自分)が見たとき分かりやすい。
5. Option Explicit を使おう(必ず宣言する)
モジュールの先頭に書きます:
Option Explicit
VBこれを入れると、すべての変数を Dim で宣言しないとエラーになります。スペルミスによるバグを防げます。初心者は必須!
6. 例題で学ぶ(ステップ別)
例題 A:名前と年齢を表示する(基本)
Sub ExampleA()
Option Explicit ' 実際はモジュール最上部に書く
Dim name As String
Dim age As Integer
name = "山田太郎"
age = 28
MsgBox "名前: " & name & vbCrLf & "年齢: " & age
End Sub
VBポイント:& は文字列連結、vbCrLf は改行です。
例題 B:数値計算での型の違い(Integer vs Long vs Double)
Sub ExampleB()
Dim a As Integer
Dim b As Long
Dim c As Double
a = 10000
b = 1000000
c = 1.2345
Debug.Print "a * a (Integer): " & (a * a) ' オーバーフローに気をつける
Debug.Print "b * b (Long): " & (b * b)
Debug.Print "c / 2 (Double): " & (c / 2)
End Sub
VB注意:Integer で大きな計算をすると オーバーフロー(範囲超過)になることがある → Long を使おう。
例題 C:Variant の罠
Sub ExampleC()
Dim v ' Variant 型
v = "123"
Debug.Print v + 1 ' 数値としての加算になる(自動変換)
v = "abc"
' Debug.Print v + 1 => 実行時エラー("abc" を数値にできない)
End Sub
VBVariant は便利だが、型が不明なためエラーや意図しない挙動が起きやすい。
例題 D:日付リテラルの書き方
Sub ExampleD()
Dim d1 As Date
Dim d2 As Date
d1 = #10/17/2025# ' # で囲む(米式表記になることに注意)
d2 = "2025/10/17" ' 文字列を代入しても Date に代入され自動変換される
Debug.Print d1
Debug.Print d2
End Sub
VBポイント:# で囲むと日付リテラル。地域設定によって解釈が変わることがあるので注意。
7. よくあるエラーと対処法
- 型が一致しません(Type mismatch)
→ 代入しようとしている値の型が変数の型と違う。例:Integerに小数を入れようとした、Stringに配列を入れようとした、など。Debug.PrintやMsgBoxで変数の中身を確認してみる。 - オーバーフロー(Overflow)
→ 変数に入れられる数の範囲を超えた。IntegerをLongに変える。 - 未定義の変数(Compile error: Variable not defined)
→Option ExplicitがありDimしていない。変数を宣言するか、スペルを直す。 - 実行時エラー(Run-time error)
→ 代入時や操作時に例外が発生。On Errorでの例外処理も学ぶと良い。
8. 実践的な使い方:ワークシートと組み合わせる例
セルの値を読み取って計算して書き戻す:
Sub SumColumn()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim total As Double
Set ws = ThisWorkbook.Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row ' A列の最終行
total = 0
For i = 1 To lastRow
If IsNumeric(ws.Cells(i, 1).Value) Then
total = total + ws.Cells(i, 1).Value
End If
Next i
ws.Cells(1, 2).Value = total ' 合計を B1 に書く
End Sub
VBポイント:ワークシートのセルは Variant 型で返ってくることがあるので IsNumeric や IsDate でチェックする習慣をつける。
9. 配列とユーザー定義型(少し進んだ話)
- 配列:
Dim arr(1 To 3) As String
arr(1) = "A"
arr(2) = "B"
arr(3) = "C"
VB動的配列:
Dim arr() As Long
ReDim arr(1 To 5)
VB- ユーザー定義型(Type):複数フィールドをまとめる
Type Person
name As String
age As Integer
End Type
Sub UsePerson()
Dim p As Person
p.name = "佐藤"
p.age = 30
MsgBox p.name & " は " & p.age & " 歳"
End Sub
VB10. ベストプラクティス(初心者向け)
- モジュール先頭に
Option Explicitを書く。 - 変数は使う前に必ず
Dimして型を指定する(As Long、As String等)。 - 数値は基本
Long(整数)/Double(小数)を使う。 - 日付は
Date型で扱う。#リテラルは地域差に注意。 Variantは必要なときだけ使う(便利だがトラブルの元)。- 変数名は意味のある名前に(例:
totalPrice、lastRow)。 - デバッグ用に
Debug.PrintやMsgBoxを使う。
11. 練習問題
Dimを使って、氏名(String)、年齢(Integer)、身長(Double)を宣言して、メッセージで表示するマクロを書いてください。- A列に数値が入っているとして、A列の合計を求めて B1 に出力するマクロを作ってください(上の
SumColumnを参考に)。 - 変数
xをVariantとして"100"(文字列)を代入し、数値として 50 を足してDebug.Printするコードを書いてみて、なぜ動くのか説明してください。
12. 練習問題の解答(模範解答)
Sub Q1()
Dim name As String
Dim age As Integer
Dim height As Double
name = "田中一郎"
age = 35
height = 172.5
MsgBox "氏名: " & name & vbCrLf & "年齢: " & age & "歳" & vbCrLf & "身長: " & height & " cm"
End Sub
VB2.(先ほどの SumColumn と同じ)
Sub Q2()
Dim ws As Worksheet
Dim lastRow As Long
Dim i As Long
Dim total As Double
Set ws = ThisWorkbook.Worksheets("Sheet1")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
total = 0
For i = 1 To lastRow
If IsNumeric(ws.Cells(i, 1).Value) Then
total = total + ws.Cells(i, 1).Value
End If
Next i
ws.Cells(1, 2).Value = total
End Sub
VBSub Q3()
Dim x ' Variant
x = "100"
Debug.Print x + 50 ' 結果 150
End Sub
VB解説:Variant は中身に応じて自動で型変換されます。文字列 "100" が数値に変換できるので +50 が数値加算となり 150 が出る。ただし "abc" のように数値に変換できない文字列だと実行時エラーになる。
13. VBAエディタで試す手順(ステップバイステップ)
- Excel を開く。
Alt + F11を押して VBAエディタ を開く。- メニューで「挿入」→「標準モジュール」を選ぶ。
- モジュールに上のサンプルコードを貼る(
Option Explicitはモジュールの一番上に)。 F5でマクロを実行するか、Excel に戻ってAlt + F8から実行する。Debug.Printの出力を見るには、VBAエディタでCtrl + G(イミディエイトウィンドウ)を表示。
14. 最後に — 学習のコツ
- まずは
Option Explicitを入れて、型を決めてコードを書く習慣をつける。 - エラーが出たらエラーメッセージをまず検索(意味を理解する)。
- 小さなサンプルを作って
Debug.PrintやMsgBoxで中身を確認する。 - 配列、オブジェクト、エラー処理へ少しずつ範囲を広げる。

