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:シートやレンジなどオブジェクトを入れる箱(例 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 型
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.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
VB

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

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

11. 練習問題

  1. Dim を使って、氏名(String)、年齢(Integer)、身長(Double)を宣言して、メッセージで表示するマクロを書いてください。
  2. A列に数値が入っているとして、A列の合計を求めて B1 に出力するマクロを作ってください(上の SumColumn を参考に)。
  3. 変数 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
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.Print や MsgBox で中身を確認する。
  • 配列、オブジェクト、エラー処理へ少しずつ範囲を広げる。

タイトルとURLをコピーしました