HOME > 即効テクニック > Excel VBA > セル操作関連のテクニック > セルに値を入力/取得する(Valueプロパティ)

即効テクニック

セル操作関連のテクニック

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

(Excel 2000)
対象のセル範囲に値を入力したり、取得するプロパティです。対象がセル範囲の時には取得される結果は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プロパティを使ってください