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

【VBA】変数にセルの値を代入する方法|基本構文から実務活用まで徹底解説

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

このように、RangeCellsの使い分けも重要です。


【VBA】セルの範囲を変数に代入する方法

✅ 文字列・数値・日付のデータ型での違い

① 文字列を代入する場合

Dim product As String
product = Range("B2").Value

文字列は、基本的にそのまま String 型に代入できます。


【VBA】変数のデータ型変換(型変換)の方法と注意点

② 数値を代入する場合

Dim price As Long
price = Range("C2").Value

セルの値が数値なら、IntegerLongDouble などに代入可能です。


【VBA】変数のデータ型変換(型変換)の方法と注意点

③ 日付を代入する場合

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次元になることに注意してください。

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


・ ループでセルの値を複数変数に代入する例

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").ValueCells(行,列).Value で値を取得
  • データ型に応じて StringLongDate などを使い分ける
  • 配列やループと組み合わせて複数セルをまとめて処理
  • 型の不一致や空欄セルには IsNumericIf文で対処
  • 実務では、変数に代入した値をメッセージ・ファイル名・条件分岐に活用する

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