RangeオブジェクトのValue、Value2、Text、Formula、Formula2プロパティ
セルのプロパティにはValueとTextという違いが分かりにくいものがあります。
違いの例を書くと、例としてセルの書式設定が会計形式「\0,000」の場合に、「1234」となるのがValueで「\1,234」となるのがTextです。書式を反映するかどうかがValueとTextの違いです。詳細は後述します。
Value、Textの他にもセルの値を表すプロパティにはValue2、Formula、FormulaR1C1があります。また、プロパティを省略した未設定での記述も可能です。
これらについて以下に説明します。
各プロパティの概要
各プロパティの概要です。
以下の各プロパティは参照は全てのプロパティで可能ですが、Textプロパティだけは設定ができません。
例1は書式を「\0,000」の金額形式に設定し、そこに「=1000+2000」という数式を入れた場合の例です。
例2は書式が日付形式の場合で、2017/8/27から25日引いた場合の例です。
詳細は後述しています。
プロパティ | 扱う内容 | 参照 | 設定 | 例1(金額) | 例2(日付) |
---|---|---|---|---|---|
未設定 | Valueとして扱う | ○ | ○ | 3000 | 2017/08/02 |
Value | セルの計算結果の値 | ○ | ○ | 3000 | 2017/08/02 |
Text | セルの書式を含めた表示文字列 | ○ | × | \3,000 | 2017年8月2日 |
Value2 | シリアル値 | ○ | ○ | 3000 | 42949 |
Formula | A1形式の数式 | ○ | ○ | =1000+2000 | =A1-A2 |
Formula2 | スピルの数式 | ○ | ○ | =1000+2000 | =R[-2]C-R[-1]C |
未設定とValueは値、Textは表示文字
A1セルの書式を「\0,000」の金額形式に設定し、そこに「=1000+2000」という数式を入れた場合に、各プロパティがどのように表現されるかのサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 |
Sub ValueTextTest() Range("A1").Select Selection.NumberFormatLocal = "\#,##0;\-#,##0" ActiveCell.Value = "=1000+2000" Debug.Print "未設定 = [" & ActiveCell & "]" Debug.Print "Value = [" & ActiveCell.Value & "]" Debug.Print "Text = [" & ActiveCell.Text & "]" Debug.Print "Value2 = [" & ActiveCell.Value2 & "]" Debug.Print "Formula =[" & ActiveCell.Formula & "]" Debug.Print "FormulaR1C1 = [" & ActiveCell.FormulaR1C1 & "]" End Sub |
実行結果
1 2 3 4 5 6 |
未設定 = [3000] Value = [3000] Text = [\3,000] Value2 = [3000] Formula =[=1000+2000] FormulaR1C1 = [=1000+2000] |
この結果の通り、プロパティ未設定とValueはセルの数式の「=1000+2000」の結果の「3000」が値設定され、Textには「\3,000」の表示文字が設定されます。
未設定とValueの場合はセルの書式は反映されていませんが、Textは反映されます。このように、セルの書式を反映するかどうかがValueとTextの違いです。
参考としてValue2、Formula、FormulaR1C1も取得しています。
Formulaには数式の「=1000+2000」が設定されます。
Value2はValueと同じ値で、FormulaR1C1はFormulaと同じ値です。
数値の場合はこのように、FormulaとFormulaR1C1、ValueとValue2には同じ値が設定されます。
どのような場合が異なるのかを以下に説明します。
Value2はシリアル値、FormulaはA1形式数式、FormulaR1C1はR1C1形式の数式
先のサンプルは単純な数値の計算でしたが、日付形式の場合にするとValue2、セル座標を含めた数式だとFormula、FormulaR1C1などの違いが見えてきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub FormulaValue2Test() Range("A1,A3").NumberFormatLocal = "yyyy年m月d日" Range("A1").Value = "2017/8/27" Range("A2").Value = 25 Range("A3").Value = "=A1-A2" Range("A3").Select Debug.Print "未設定 = [" & ActiveCell & "]" Debug.Print "Value = [" & ActiveCell.Value & "]" Debug.Print "Text = [" & ActiveCell.Text & "]" Debug.Print "Formula =[" & ActiveCell.Formula & "]" Debug.Print "FormulaR1C1 = [" & ActiveCell.FormulaR1C1 & "]" Debug.Print "Value2 = [" & ActiveCell.Value2 & "]" End Sub |
実行結果
1 2 3 4 5 6 |
未設定 = [2017/08/02] Value = [2017/08/02] Text = [2017年8月2日] Value2 = [42949] Formula =[=A1-A2] FormulaR1C1 = [=R[-2]C-R[-1]C] |
日付の場合は未設定とValueは日付形式のスラッシュ(/)区切りで、Textは書式設定の年月日付きになります。
これは先のサンプルと同じでセルの書式を反映しないのがValue、反映するのがTextです。
Value2には日付を表すシリアル値が入ります。具体的には1900/1/1からの経過日付の42949日を示しています。なお、1900/1/1は1日目としてカウントされます。
FormulaにはA1形式の数式、FormulaR1C1にはR1C1形式の数式が設定されます。Formula2とFormula2R1C1はスピル機能を使う場合に使用します。