Excel VBA | VBAのデータ型と変数のデータ型の指定

Excel VBA VBA
スポンサーリンク

初心者向けにやさしく、たっぷり例題と実践的な説明を出します。読みやすく段階を追って進めますね。コードはそのまま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:シートやレンジなどオブジェクトを入れる箱(例 WorksheetRange

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

4. なぜ型を指定したほうが良いのか?(理由)

  1. エラーを早く見つけられる:違う型を代入するとエラーになるのでバグに気づきやすい。
  2. 処理が速くなる:VBAは型が決まっていると効率良く動く。
  3. 読みやすいコードになる:他人(未来の自分)が見たとき分かりやすい。

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
VB

Variant は便利だが、型が不明なためエラーや意図しない挙動が起きやすい。

例題 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.PrintMsgBox で変数の中身を確認してみる。
  • オーバーフロー(Overflow)
    → 変数に入れられる数の範囲を超えた。IntegerLong に変える。
  • 未定義の変数(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 型で返ってくることがあるので IsNumericIsDate でチェックする習慣をつける。


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
VB

10. ベストプラクティス(初心者向け)

  1. モジュール先頭に Option Explicit を書く。
  2. 変数は使う前に必ず Dim して型を指定する(As LongAs String 等)。
  3. 数値は基本 Long(整数)/Double(小数)を使う。
  4. 日付は Date 型で扱う。# リテラルは地域差に注意。
  5. Variant は必要なときだけ使う(便利だがトラブルの元)。
  6. 変数名は意味のある名前に(例:totalPricelastRow)。
  7. デバッグ用に Debug.PrintMsgBox を使う。

11. 練習問題

  1. Dim を使って、氏名(String)、年齢(Integer)、身長(Double)を宣言して、メッセージで表示するマクロを書いてください。
  2. A列に数値が入っているとして、A列の合計を求めて B1 に出力するマクロを作ってください(上の SumColumn を参考に)。
  3. 変数 xVariant として "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
VB

2.(先ほどの 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
VB
Sub Q3()
    Dim x  ' Variant
    x = "100"
    Debug.Print x + 50   ' 結果 150
End Sub
VB

解説:Variant は中身に応じて自動で型変換されます。文字列 "100" が数値に変換できるので +50 が数値加算となり 150 が出る。ただし "abc" のように数値に変換できない文字列だと実行時エラーになる。


13. VBAエディタで試す手順(ステップバイステップ)

  1. Excel を開く。
  2. Alt + F11 を押して VBAエディタ を開く。
  3. メニューで「挿入」→「標準モジュール」を選ぶ。
  4. モジュールに上のサンプルコードを貼る(Option Explicit はモジュールの一番上に)。
  5. F5 でマクロを実行するか、Excel に戻って Alt + F8 から実行する。
  6. Debug.Print の出力を見るには、VBAエディタで Ctrl + G(イミディエイトウィンドウ)を表示。

14. 最後に — 学習のコツ

  • まずは Option Explicit を入れて、型を決めてコードを書く習慣をつける。
  • エラーが出たらエラーメッセージをまず検索(意味を理解する)。
  • 小さなサンプルを作って Debug.PrintMsgBox で中身を確認する。
  • 配列、オブジェクト、エラー処理へ少しずつ範囲を広げる。

VBA
スポンサーリンク
シェアする
@lifehackerをフォローする
スポンサーリンク
タイトルとURLをコピーしました