ExcelでVBAを使って作業を自動化する際、最もよく使われる処理の一つが「セルの値を変数に代入する」操作です。セルに入力された値を読み取って処理を分岐したり、他のセルに転記したり、ファイル名やメール本文に利用するなど、あらゆる場面で変数への代入が登場します。
この記事では、「vba 変数 セルの値を代入」というキーワードで検索された方に向けて、以下の内容をわかりやすく解説します。
✅ 変数にセルの値を代入する基本構文
✅ 文字列・数値・日付のデータ型ごとの扱い方
✅ 複数セルの値をまとめて変数に代入する方法
✅ 実務で役立つサンプルコード集
✅ よくあるエラーと対策
目次
✅ 変数にセルの値を代入する基本構文
VBAでは、セルの値を取得して変数に代入するには以下のような構文を使います。
Dim userName As String
userName = Range("A1").Value
上記のコードでは、セルA1の値を文字列型変数 userName に代入しています。
・ セル参照の基本ルール
"A1"のようにアドレスで指定Cells(1, 1)のように行・列番号で指定
(例:Cells(2, 3)⇒ セルC2)
Dim age As Integer
age = Cells(2, 3).Value
このように、RangeとCellsの使い分けも重要です。
✅ 文字列・数値・日付のデータ型での違い
① 文字列を代入する場合
Dim product As String
product = Range("B2").Value
文字列は、基本的にそのまま String 型に代入できます。
② 数値を代入する場合
Dim price As Long
price = Range("C2").Value
セルの値が数値なら、Integer や Long、Double などに代入可能です。
③ 日付を代入する場合
Dim saleDate As Date
saleDate = Range("D2").Value
日付は Date 型に代入しておけば、あとで「曜日」「年月日」などを取り出すのも簡単です。
✅ 変数に複数セルの値をまとめて代入する方法
複数のセルに入力されたデータを、一度に変数(配列)へ代入する方法もあります。
Dim info As Variant
info = Range("A2:C2").Value
このコードでは、A2〜C2の3つのセルの値を info(1,1) 〜 info(1,3) のように取得できます。この場合、配列は2次元になることに注意してください。
・ ループでセルの値を複数変数に代入する例
Dim data(1 To 5) As Variant
Dim i As Integer
For i = 1 To 5
data(i) = Cells(i + 1, 2).Value ' B列2行目〜6行目の値を代入
Next i
このように、繰り返し処理と組み合わせることで動的な代入も可能になります。
■ 実務で使えるサンプルコード
・名前と点数をセルから取得してメッセージ表示する方法
Sub ShowScore()
Dim name As String
Dim score As Integer
name = Range("A2").Value
score = Range("B2").Value
MsgBox name & "さんの点数は " & score & " 点です。"
End Sub
・日付を変数に代入して曜日を表示する方法
Sub ShowWeekday()
Dim reportDate As Date
Dim weekdayName As String
reportDate = Range("C2").Value
weekdayName = Format(reportDate, "dddd")
MsgBox "レポート提出日は " & weekdayName & " です。"
End Sub
・セルの値を使ってファイル名を作成する方法
Sub SaveWorkbookWithCellName()
Dim clientName As String
Dim fileName As String
clientName = Range("A1").Value
fileName = clientName & "_見積書.xlsx"
ThisWorkbook.SaveAs "C:\見積書\" & fileName
End Sub
このように、セルの値を使って処理内容を動的に変えることができます。
■ よくあるエラーと対策
・型が一致しない
Dim age As Integer
age = Range("A1").Value ' A1に「30歳」などの文字列があるとエラー
🔍 対策:数値だけを想定している場合は、IsNumeric関数で判定してから代入します。
If IsNumeric(Range("A1").Value) Then
age = Range("A1").Value
Else
MsgBox "数値が入力されていません"
End If
【VBA】3パターンの"コンパイルエラー:ユーザー定義型は定義されていません。"エラーの原因
・空白セルに代入してしまう
セルが空白でも、VBAは基本的に .Value を問題なく代入しますが、後続処理でエラーになる場合もあります。
If Range("A1").Value = "" Then
MsgBox "セルが空白です"
Else
userName = Range("A1").Value
End If
このように、空欄チェックも忘れずに実装しておくと安全です。
・セルの参照ミス
userName = Range(A1).Value ' ← A1をダブルクォーテーションで囲んでいない(構文エラー)
正しくは:
userName = Range("A1").Value
■ まとめ|VBAでのセル値→変数代入は業務自動化の第一歩
「セルの値を変数に代入する」処理は、VBAを使った自動化の土台になる基本中の基本です。
以下のポイントをしっかり押さえておきましょう。
Range("A1").ValueやCells(行,列).Valueで値を取得- データ型に応じて
String、Long、Dateなどを使い分ける - 配列やループと組み合わせて複数セルをまとめて処理
- 型の不一致や空欄セルには
IsNumericやIf文で対処 - 実務では、変数に代入した値をメッセージ・ファイル名・条件分岐に活用する