初心者のためのExcelマクロ超入門(絶対できるVBA開発)

マクロがまったくわからない人のためにエクセルマクロやVBAについてできるだけわかりやすく書いています。Twitter:@shuhhohhey

セルの値を取得する-初心者のためのExcel(エクセル)マクロVBA入門

セルの内容を変数に取得する(Cellsプロパティ)

すごく簡単に言えば、前回書いた命令文の逆をやれってことなんですが。。。
前回書いたように標準モジュールに書いて行きましょう。したがって、「Sheet1のセルA1の内容を取得したい」場合には、
以下のように書きます。

Public Sub GetA1Cell()

    'セルの値を取得するために変数を宣言する
    Dim vntA As Variant
    
    ' セルA1の内容を取得する
    vntA = Sheet1.Cells(1, 1).Value

End Sub


Sheet1を省略してはいけまんせんよ。いじょ。ってのもさみしいので、、

簡単です。「Sheet1のセルA1の内容を取得したい」の「の」を「.」に置き換えればいいだけですね。
もう少し解説すると、変数はVariant型(汎用型)を利用しています。理由はセルA1の内容が「何かわからないから」ですね。確実に日付が入るのならDate型で作成するし、数字ならLong型、文字列ならString型と、要するにプログラム内でその値をどう扱いたいか?によって変えていくことが大切です。

Cellsプロパティ

簡単にVBAのヘルプを載せておきますと。

Range オブジェクトでは、指定された範囲のセルを表す Range オブジェクトを返します。DataSheet オブジェクトでは、現在使用中のセルだけでなく、データシートのすべてのセルを表す Range オブジェクトを返します。値の取得のみ可能です。

こうやって、ヘルプ見ると、普通にオブジェクトという言葉が使われています。事前にオブジェクトについてて学んでないとこれがなんだか全然読めません。しかし、わかるとこれほど簡潔な説明もありません。CellsプロパティはRangeオブジェクトを返します。つまり、Cells.ValueとすることでRangeオブジェクトのValueプロパティを参照していることがわかるわけです。

どういうこと?

こういうことです。

vntA = Sheet1.Cells(1, 1).Value

のCells(1, 1)はRangeオブジェクトを返す(つまり戻り値)ので・・・

vntA = Sheet1.Range("A1").Value

こうなる。そして、RangeオブジェクトのValueプロパティによって値が取得され、=の代入演算子によって変数vntAに入る。ということになります。ものすごーく細かく説明するとこうなんですが、実際にはCellsプロパティ使ったら座標で値で指定でき、Rangeオブジェクト使ったらA1のような指定で値を設定したり取得したりすることができる。くらいに覚えておけば、あまり問題はありません。

今日はここまで。次回は、セルの書式を操作してみましょう。

かしこ