セルに値を入力/取得する(Valueプロパティ)

 対象のセル範囲に値を入力したり、取得するプロパティです。対象がセル範囲
の時には取得される結果は2次元の配列になります。

 構文  Object.Value     設定/取得


 設定項目        内容
  Object          Rangeオブジェクト


 次のコードは、セルにいろいろな値を入力するサンプルです。

●サンプル1●
Sub ValueSamp1()

    '----(1)文字列
    Range("A1").Value = "あいうえお"
    '----(2)数値
    Range("A2").Value = 1234.56
    '----(3)数値
    Range("A3").Value = "01234.56"
    '----(4)数値を文字列
    Range("A4").Value = "'01234.56"
    '----(5)数値(桁区切り)
    Range("A5") = "1,234.56"
    '----(6)日付
    Range("A6") = "1999/9/15"
    '----(7)時刻
    Range("A7") = "10:10:45"

End Sub


 文字列を入力する際には、(1)のように文字列をダブルクォーテーションで囲みます。
数値の場合には(2)か(3)のように記述します。結果はどちらも同じです。文字列として
入力したい場合には、(4)のように値の先頭にアポストロフィを付けてください。また、
(5)〜(7)のように、桁区切り、日付、時刻など、様々な形式の数値を入力することがで
きます。なお、Rangeプロパティの既定のプロパティですので、(5)〜(7)のように記述を
省略することができます。ただし、省略した場合は若干処理速度が遅くなります。

 先のサンプルで入力したデータを利用して、Valueプロパティでセルの値を参照する際
に注意すべきことを把握してください。


●サンプル2●
Sub ValueSamp2()

    Dim c As Range

    For Each c In Range("B1:B7")
        '----1列左のセルの値を所得
        c.Value = c.Offset(, -1).Value
    Next c

End Sub


 A列には、さきほど入力した値が横に示した形式で入力されています。その値を取得
し、隣のB列に入力しています。文字列、標準の数値で入力されている(1)〜(4)に関し
てはA列と同じようにB列に記述されていますが、(5)〜(7)に関しては書式が失われ、
標準の数値形式での値になってしまっています。セルに表示された通りのイメージで
データを取得したい場合には、Textプロパティを使用するか、書式設定も一緒に取得
してください。
 なお、ここまで紹介したのは単体セルを対象にした場合のみですが、セル範囲に対し
ても使用可能です。複数のセルに対して、一度に値の入力及び取得を行います。ただし、
値を取得する場合には若干注意が必要です。例えば次のサンプル3はエラーとなります。


●サンプル3●
Sub ValueSamp3()

    '----倍精度小数点型で宣言
    Dim myValue As Double

    '----型の不一致でエラーが発生
    myValue = Range("A1:B10").Value

End Sub


 最初に書いたように、セル範囲の値が2次元の配列として返されるのが原因です。
セル範囲の値を格納する変数をVariant型で宣言すると、自動的に配列変数として
解釈される特徴を利用して、次のサンプル4のように記述すると良いでしょう。


●サンプル4●
Sub ValueSamp4()

    '----バリアント型で宣言
    Dim myValue As Variant

    '----自動的に配列変数と解釈
    myValue = Range("A1:B10").Value
    '----配列ですのでTRUEを返します
    MsgBox IsArray(myValue)

End Sub


●注意●
 セルに数式が入力されている場合、Valueプロパティは計算結果の値を返します。
数式を取得したい場合には、Formulaプロパティ、FormulaR1C1プロパティを使って
ください

Excel2000



戻る


Excel Word Access VBA! モーグ