更新日:、 作成日:

VBA セルの値を取得する (Range.Value)

はじめに

Excel VBA マクロでセルの値を取得する方法を紹介します。

Range("B1").Value または Cells(1, 2).Value プロパティから、セル「B1」の値を取得できます。

Text プロパティから、セルに表示されている値を取得できます。

Worksheets("Sheet1") または Worksheets(1) に Range や Cells を入力して、別シートのセルの値を取得できます。

値を設定するには「セルに値を入力する」をご覧ください。
セルを範囲指定するすべての方法は「セルを範囲指定して取得する」をご覧ください。

セルの値を取得する

セルに入力された結果や、表示されている値を取得できます。

Range の引数にセル名を指定すると、そのセルの値を取得できます。

セル「A1」の値を取得するには Range("A1").Value を入力します。

Dim s As String
s = Range("A1").Value
Debug.Print(s)

Cells の引数にセルの行と列の番号を指定すると、そのセルの値を取得できます。

行「2」、列「A」の値を取得するには Cells(2, 1).Value を入力します。

Dim s As String
s = Cells(1, 1).Value ' A1
s = Cells(2, 1).Value ' A2
s = Cells(1, 2).Value ' B1
s = Cells(2, 2).Value ' B2
Debug.Print(s)
関数や数式を取得するには「セルの関数や数式を取得する」をご覧ください。

表示されている値

Text プロパティから、そのセルに表示されている値を取得できます。表示形式を適用した値です。

Dim s As String
s = Range("A1").Text
Debug.Print(s)

Value と Value2 の違い

Value2 を使用する必要はありません。

Value の他に Value2 からもセルの値を取得できます。どちらも同じ値を取得しますが、セルの表示形式が日付のときに違いがあります。

  • Value:セルの表示形式が日付のときは、Date 型で取得します。
  • Value2:セルの表示形式が日付のときは、Double 型で取得します。

セル「A1」に 2001/01/01 を入力すると、次の値を取得します。

Dim v As Variant
v = Range("A1").Value ' 2001/01/01 ' Date 型
Debug.Print(v)

Dim v2 As Variant
v2 = Range("A1").Value2 ' 36892 ' Double 型
Debug.Print(v2)

日付の実際の値は数値なので、Date 型と Double 型は相互変換できます。Value を Value2 に代入しても、逆に代入しても結果は同じです。String 型とも相互変換できます。

データ型について詳しくは「変数の型やデータ型」をご覧ください。

セルの範囲の値を取得する

セルの範囲「A1」~「B2」の値を取得するには Range("A1:B2").Value または Range("A1", "B2").Value を入力します。

値は (行, 列) の二次元配列が取得されます。最小インデックスは 1 からスタートします。受け取る変数の型を Variant 型にします。

Dim v As Variant
v = Range("A1:B2").Value
v = Range("A1", "B2").Value
Debug.Print(v(1, 1)) ' A1
Debug.Print(v(2, 1)) ' A2
Debug.Print(v(1, 2)) ' B1
Debug.Print(v(2, 2)) ' B2
2

セルの範囲の値をまとめて取得または設定すると高速に操作できます。

詳しくは「高速化」をご覧ください。

別シートのセルの値を取得する

シートを指定するには Worksheets の引数にシート名またはインデックスを指定します。

Sheet1 を指定するには Worksheets("Sheet1") または Worksheets(1) を入力します。

sheet1
Dim s As String
' Sheet1 のセル「A1」の値を取得
s = Worksheets("Sheet1").Range("A1").Value
s = Worksheets(1).Range("A1").Value
Debug.Print(s)

' Sheet2 のセル「A1」の値を取得
s = Worksheets("Sheet2").Range("A1").Value
s = Worksheets(2).Range("A1").Value
Debug.Print(s)

Sheet1 に Range や Cells を入力すると、自身のシートのセルになります。自身を表す Me. が省略されています。

' どちらも同じコード
Range("A1").Value = "Sheet1"
Me.Range("A1").Value = "Sheet1"

標準モジュールに Range や Cells を入力すると、開いているシートのセルになります。アクティブシートを表す ActiveSheet. が省略されています。

' どちらも同じコード
Range("A1").Value = "アクティブ"
ActiveSheet.Range("A1").Value = "アクティブ"