エクセルのVBAのセルの値を取得/設定するサンプルです。
目次
セルの値を取得する (Range/Cells)
値 = Range("位置").Value |
値 = Cells(行の位置,列の位置).value |
RangeまたはCellsで位置を指定してValueで値を取得します。
Sub test1()
' A1のセルの値を取得
Debug.Print Range("a1").Value '赤
' B2のセルの値を取得
Debug.Print Cells(2, 2).Value '黄
' C3のセルの値を取得
Debug.Print Cells(3, "C").Value '青
End Sub
4行目は、Rangeでセルを指定してValueで値を取得しています。
7行目の(2,2)は、(2行目、2列目)を表します。
10行目の(3,"C")は、(3行目、C列)を表します。
注:「#N/A」という文字列を取得した場合、エラー(2042)になります。
セルの表示値を取得する(text)
Sub test1()
Debug.Print Cells(1, 1).Text '値または####
End Sub
注:セル幅が狭く####と表示されているときは、値ではなく####を取得します。
複数のセルの値を配列で取得する (Range)
上記のB2,C2,D2の値を取得します。
Sub test1()
Dim a As Variant
a = Range("b2:D2")
Debug.Print a(1, 1) 'aが出力される
Debug.Print a(1, 2) 'aが出力される
Debug.Print a(1, 3) 'aが出力される
End Sub
5行目は、複数のセルの値を取得しています。
取得した値は7行目以降のように2次元配列になります。
別シートのセルを指定して値を取得する (Sheets)
Sheets("シート名").Range("位置").Value |
Sheets("シート名").Cells(行の位置,列の位置).Value |
別シートの指定は、Sheets(シート名)を使用します。
Sub test1()
' sheet2のA1のセルの値を取得
Debug.Print (Sheets("sheet2").Range("a1").Value)
' sheet2のB2のセルの値を取得
Debug.Print (Sheets("sheet2").Cells(2, 2).Value)
End Sub
4行目は、「sheet2」を指定しRangeを使用しています。
7行目は、Cellsを使用しています。
セルに値を設定する (Range/Cells)
Range("位置").Value = 値 |
Cells(行の位置,列の位置).value = 値 |
RangeまたはCellsで位置を指定してValueに値を設定します。
Sub test1()
' A1のセルに値を設定
Range("a1").Value = "赤"
' B2のセルに値を設定
Cells(2, 2).Value = "黄"
' C3のセルに値を設定
Cells(3, "C").Value = "青"
End Sub
7行目の(2,2)は、(2行目、2列目)を表します。
10行目の(3,"C")は、(3行目、C列)を表します。
セルを範囲で指定して値を設定する (Range)
Range("位置:位置").Value = 値 |
Range("位置","位置").Value = 値 |
Rangeは、セルを範囲で指定できます。
Sub test1()
' b2からc2のセル範囲を表す
Range("b2:c2").Value = "test3"
' b4からc6のセル範囲を表す
Range("b4", "c6").Value = "test4"
End Sub
4行目は、Rangeで2つのセルを「コロン」で区切っています。
7行目は、Rangeで2つのセルを「カンマ」で区切っています。
セルにエクセル関数を設定する(Formula)
Sub test1()
Sheets("Sheet2").Cells(1, 2).Formula = "=sum(a1:a3)"
End Sub
3行目は、Formulaでエクセル関数の合計のsumを設定しています。
関数の最初にイコール(=)が必要です。
Formulaは、式という意味です。
配列の値をループで横に並べて設定する
Sub test1()
arr = Array(10, 20, 30, 40, 50)
For i = 0 To UBound(arr)
Cells(2, i + 1).Value = arr(i) '
Next
End Sub
3行目は、配列です。
6行目のCellsの横の位置をループの変数にしています。
配列の値をループで縦に並べて設定する
Sub test1()
arr = Array(10, 20, 30, 40, 50)
For i = 0 To UBound(arr)
Cells(i + 1, 2).Value = arr(i) '
Next
End Sub
3行目は、配列です。
6行目のCellsの縦の位置をループの変数にしています。
別シートのセルを指定して値を設定する (Sheets)
Sheets("シート名").Range("位置").Value = 値 |
Sheets("シート名").Cells(行の位置,列の位置).Value = 値 |
別シートの指定は、Sheets(シート名)を使用します。
Sub test1()
' sheet2のA1のセルに値を設定
Sheets("sheet2").Range("a1").Value = "赤"
' sheet2のB2のセルに値を設定
Sheets("sheet2").Cells(2, 2).Value = "黄"
' sheet2のC3のセルに値を設定
Sheets("sheet2").Cells(3, "C").Value = "青"
End Sub
4行目は、「sheet2」を指定しRangeを使用しています。
7,10行目も、「sheet2」を指定しCellsを使用しています。
関連の記事
VBA For文の使い方(処理を繰り返す)
VBA Do Loop文の使い方(処理を繰り返す)
Excel VBA セルの値をテキストに出力するサンプル