| セルの見た目(計算結果および書式設定) | |||||||
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | 45,123 | おはよう | 2001年03月10日Sat | おはよう45123 | 2124/9/24 22:15 | TRUE | |
| セルの内容 | |||||||
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | 45123 | おはよう | 2001/3/10 22:15:00 | =B1 & A1 | =$A1 + $C1 | TRUE | |
Sub Range1()
Dim a As Double, b As String, i As Long
On Error Resume Next
For i = 0 To 6
a = Sheet1.Range("A1").Offset(0, i).Value
b = Sheet1.Range("A1").Offset(0, i).Value
Stop
Next i
End Sub
Value プロパティは、セルの計算済みの値を取得する時に、最も一般的な手段です。セルに格納されている値が数字でもテキストでも日付でも、各々の型の変数に格納するのに最も適した形で値を返します。ただし、上のコードのように何でもかんでも Double 型のような特定の型に代入しようとすれば、型変換のエラーが発生する場合があります。On Error Resume Next 行をコメントアウトすれば、B1 および D1 の内容を変数 a に格納するときにエラーが発生することを確認できます。
Sub Range2()
Dim a As Double, b As String, i As Long
For i = 0 To 6
a = Val(Sheet1.Range("A1").Offset(0, i).Value2)
b = Sheet1.Range("A1").Offset(0, i).Value2
Stop
Next i
End Sub
Value2 プロパティは、型による解釈を抑止した動きをします。その結果、C1 E1 F1 セルで返される値が、 Value の場合と異なります。まず、日付を格納している C と E の場合、Value の場合と違い、内部が持つ日付シリアルの数値そのものが Double 型で返されます。また、Boolean 型の F セルの場合、Value では受け手が Double 型 a の場合には数値解釈した値が返されていましたが、Value2 では、常に解釈しない文字列としてのみ返されます。なお、ここでは Val 関数を利用して、セルから文字列が返された時のエラーを回避しています。
Sub Range3()
Dim a As Double, b As String, i As Long
On Error Resume Next
For i = 0 To rMax - 1
a = Val(Sheet1.Range("A1").Offset(0, i).Text)
b = Sheet1.Range("A1").Offset(0, i).Text
Stop
Next i
End Sub
A1 セルも、セル内部では数値データであるにもかかわらず、書式設定通りに , を含む文字列として返されます。その結果、Double 型 a への格納は正しく行われません。また、日付を持つ C1 セルも、日本語を含む文字列として返されます。
Sub Range4()
Dim b As String, c As String, i As Long
For i = 0 To rMax - 1
b = Sheet1.Range("A1").Offset(0, i).Formula
c = Sheet1.Range("A1").Offset(0, i).FormulaR1C1
Stop
Next i
End Sub
Formula も FormulaR1C1 も、式をそのまま取得しますが、Excel のセル参照式の記述方法には、A1 方式と R1C1 方式の2通りがあるため、それぞれに対応する式が取得できるように、2 つのプロパティが用意されています。利用しているシートの設定に依存せず、どちらのプロパティも混在して利用できます。
これらと似たものに、FormulaLocal および FormulaR1C1Local があります。これは、国際版の Excel (基本的にはヨーロッパ版を指す)で、英語以外の言語(たとえばドイツ語)によって式を記述しているような場合に利用するものです。
Sub Range5()
Sheet1.Range("A2").Value = 789
Sheet1.Range("B2").Value = "おやすみ"
Sheet1.Range("C2").Value = "01234"
Sheet1.Range("D2").Value = "'01234"
Sheet1.Range("E2").Value = "2001/3/20"
Sheet1.Range("A3").Formula = "=$C$1"
Sheet1.Range("B3").Formula = "=C1"
Sheet1.Range("C3").FormulaR1C1 = "=R2C1 + 1000"
Sheet1.Range("D3").FormulaR1C1 = "=R[-2]C[1]"
Sheet1.Range("E3").FormulaR1C1 = "=""01234"""
End Sub
| 実行後のセルの見た目 | |||||||
| A | B | C | D | E | F | G | |
|---|---|---|---|---|---|---|---|
| 1 | 45,123 | おはよう | 2001年03月10日Sat | おはよう45123 | 2124/9/24 22:15 | TRUE | |
| 2 | 789 | おやすみ | 1234 | 01234 | 2001/3/20 | ||
| 3 | 2001年03月10日Sat | 2001年03月10日Sat | 1789 | 2124/9/24 22:15 | 01234 | ||
Sub Range6()
Dim a As Variant
a = Sheet1.Range("A1:C2").Value
Stop
End Sub
実行後の変数 a は配列のようになり、a(1,2) というように添字をつけて、B1 セルの値を読み出すことができます。
Sub Range7()
Dim a As Variant, b As Variant
a = Sheet1.Range("A1:C2,E1:F1").Value
b = Sheet1.Range("A1:C2,E1:F1").Areas(2).Value
Stop
End Sub
この場合、変数 a には、A1:C2 セルの値が、変数 b には、E1:F1 セルの値が格納されます。
Sub Range8()
Sheet1.Range("B5:C6").Value = 101
End Sub
この場合、B5:C6 セルの値がすべて、101 となります。
Sub Range9()
Dim a(2) As Long
a(0) = 1
a(1) = 2
a(2) = 3
Sheet1.Range("B5:C6").Value = a
End Sub
1次元配列は、Column 方向に解釈され、次のようになります。Range 内に収まらない添字は無視されます。
| 実行後のセル | |||||
| B | C | D | E | F | |
|---|---|---|---|---|---|
| 5 | 1 | 2 | |||
| 6 | 1 | 2 | |||
Sub Range10()
Dim a(2) As Long
a(0) = 1
a(1) = 2
a(2) = 3
Sheet1.Range("B5:E6").Value = a
End Sub
| 実行後のセル | |||||
| B | C | D | E | F | |
|---|---|---|---|---|---|
| 5 | 1 | 2 | 3 | #N/A | |
| 6 | 1 | 2 | 3 | #N/A | |
Sub Range11()
Dim a(1, 3) As Long
a(0, 0) = 1
a(0, 1) = 2
a(0, 2) = 3
a(0, 3) = 4
a(1, 0) = 11
a(1, 1) = 12
a(1, 2) = 13
a(1, 3) = 14
Sheet1.Range("B5:E6").Value = a
End Sub
| 実行後のセル | |||||
| B | C | D | E | F | |
|---|---|---|---|---|---|
| 5 | 1 | 2 | 3 | 4 | |
| 6 | 11 | 12 | 13 | 14 | |
Sub Range12()
Sheet1.Range("B5:E6").Value = _
Array(21, 22, 23, 24, 25)
End Sub
| 実行後のセル | |||||
| B | C | D | E | F | |
|---|---|---|---|---|---|
| 5 | 21 | 22 | 23 | 24 | |
| 6 | 21 | 22 | 23 | 24 | |