VBAテクニック集 VBA一覧 変数の代入 文法・構文

【VBA】変数にまとめて代入する方法|複数代入・配列・オブジェクトの扱いも解説

VBA(Visual Basic for Applications)でプログラムを記述する際、必ず登場するのが「変数」です。中でも複数の変数に一度に値を代入したい場面はよくあります。

例えば「氏名・部署・得点」を一括でセットしたいときや、「ループ内で複数の初期値を一気に入れたい」ときなど、まとめて代入できればコードがスッキリし、保守性も上がります

この記事では、「vba 変数 代入 まとめて」というキーワードで検索された方に向けて、以下のポイントを詳しく解説します。

✅ VBAで変数をまとめて宣言・代入する基本構文
✅ 同じ値を複数の変数に同時に代入する方法
✅ 配列やType(ユーザー定義型)を使った応用例
✅ 実務での便利な使用パターンと注意点
✅ 初心者が間違えやすい書き方とその対策

✅ 変数をまとめて宣言&代入する基本構文

まず、VBAで複数の変数を一度に「宣言」する方法は、次のようにカンマで区切って記述します。

Dim name As String, department As String, score As Integer

では「代入」をまとめて行うにはどうするのでしょうか?以下のように、1行で複数の変数に代入することは可能です。

name = "田中": department = "営業部": score = 85

このように、コロン(:)で複数のステートメントを連結することで、1行で複数代入ができます。


✅ 同じ値を複数の変数に一括で代入する方法

よくあるのが「複数の変数に同じ値を代入したい」ケースです。

Dim x As Integer, y As Integer, z As Integer
x = y = z = 0  ' ← これはVBAではNG

❌ 上記はエラーや意図しない結果になる

VBAは「代入の連鎖」ができないため、以下のように個別に代入するか、

x = 0: y = 0: z = 0

あるいは関数で共通値を返す形にしてまとめることができます。


✅ 配列を使ってまとめて代入するテクニック

変数が多数ある場合は、配列を使ってまとめて値を管理すると効率的です。

Dim arr(1 To 3) As Variant
arr(1) = "田中"
arr(2) = "営業部"
arr(3) = 85

さらに、Array関数を使えば一括でまとめて代入することも可能です。

Dim arr As Variant
arr = Array("田中", "営業部", 85)

この方法は、以下のように個別の値にアクセスできます:

Debug.Print arr(0)  ' 田中
Debug.Print arr(1)  ' 営業部
Debug.Print arr(2)  ' 85

【VBA】セルの値を変数配列に取得:ループ処理

✅ ユーザー定義型(Type)で構造的にまとめる

変数が固定されていて、それぞれの意味も明確な場合は、ユーザー定義型(Type)を使ってひとまとまりに管理することもできます。

Type PersonInfo
    name As String
    department As String
    score As Integer
End Type

これを使った代入例:

Dim person As PersonInfo
person.name = "田中"
person.department = "営業部"
person.score = 85

これにより、「人の情報はpersonというひとつのオブジェクトで扱う」ことが可能になります。業務での構造化データ管理に非常に有効です。


【VBA】Function で複数の戻り値を返す方法と活用例

■ 実務でよくあるケース:セルの値をまとめて変数に代入

以下のように、ワークシート上の連続したセル範囲の値を一括で取得し、配列として変数に代入する方法もあります。

Dim info As Variant
info = Range("A1:C1").Value

このとき、配列は二次元になるので注意が必要です。

MsgBox info(1, 1) ' A1の値
MsgBox info(1, 2) ' B1の値
MsgBox info(1, 3) ' C1の値

この方法は、入力データを一括で取り込んで変数に渡すときに便利です。


✅ ループで変数に値を順番に入れる方法

変数名を固定できない場合は、配列とループを組み合わせます。

Dim arr(1 To 3) As Variant
Dim i As Integer

For i = 1 To 3
    arr(i) = Cells(1, i).Value
Next i

このようにすると、「1行目のA~C列までの値を、順に配列に代入する」ことができます。


【VBA】セルの値を変数に格納:ループ処理

■ オブジェクト変数もまとめて代入可能

WorkbookやWorksheetなどのオブジェクトも、まとめて変数に代入できます。

Dim wb As Workbook, ws As Worksheet
Set wb = ThisWorkbook: Set ws = wb.Sheets("データ")

オブジェクト変数の代入には Set キーワードが必要です。これも複数行を : で繋ぐことで簡潔に書けます。


■ よくあるミスと注意点

⚠ x = y = 0 の書き方は使えない

VBAは「代入の連鎖」がサポートされていないため、他言語のような書き方は誤動作の原因になります。

' 例)意図せずTrue/Falseになる
x = (y = 0)  ' yが0ならTrue(-1)、xに代入されるのは-1

⚠ 配列の添字は0開始が基本(Array関数)

Array関数で定義された配列は arr(0) から始まります。Option Base 1 を指定すれば1開始になりますが、混乱の元になるため明示的に扱うのがおすすめです。


【VBA】セルの値を取得:ループ処理

■ まとめ|変数のまとめて代入は「効率化」の第一歩

変数をまとめて代入することで、コードの可読性と保守性が大きく向上します。VBAでは直接「一括代入」する文法は少ないですが、以下のような方法を駆使すれば実現可能です。

  • コロン(:)で複数代入を1行で記述
  • Array関数配列での一括管理
  • Type(ユーザー定義型)で構造的に代入
  • Setによるオブジェクト代入
  • 配列+ループでセルからの値取得

特に実務では、「変数に何をどう割り当てたか」が後々のバグの原因になることも多いため、整理された代入構文は非常に役立ちます。

-VBAテクニック集, VBA一覧, 変数の代入, 文法・構文