Excel VBAでセルの値を取得する方法を紹介します。
Range関数またはCells関数を使うとセルの値を取得できるので、この2つの関数の使い方を説明します。
Excel VBAでセルの値を取得する方法① Range関数
Excelシートのセルの値を取得する方法の1つ目は、Range関数を使う方法です。
例えば、C1に書かれているテキストを取得し、メッセージボックスで表示する関数を作るとします。
そのサンプルコードはこんな風になります。
Sub セルの値を取得する()
Dim C1_Text As String 'セルから取得した文字列を格納する変数
C1_Text = Range("C1").Value 'セルC1の値を取得して変数へ代入する
MsgBox (C1_Text) 'メッセージボックスを使って取得した文字列を表示する
End Sub
4行目の「Range(“C1”).Value」がC1セルからテキストを取得するコードです。
Range関数の引数に取得したセル番地を入力し、.Valueを続けるだけでデータを取得できます。

セルの番地をダブルクオーテーション(“)で囲むのを忘れないでください!
Excel VBAでセルの値を取得する方法② Cells関数
セルの値を取得する方法にはもう1つあります。
それがCells関数を使う方法です。
先ほどと同じ例でサンプルコードを書きました。
ただし、さっきと違って4行目がRange関数からCells関数に置き換わっています。
Sub セルの値を取得する()
Dim C1_Text As String 'セルから取得した文字列を格納する変数
C1_Text = Cells(1, 3).Value 'セルC1の値を取得して変数へ代入する
MsgBox (C1_Text) 'メッセージボックスを使って取得した文字列を表示する
End Sub

Cells関数の引数は2つあります。行インデックス(行番号)と列インデックス(列番号)の順番なのですが、いつもどっちが先だったっけ??って迷うんですよね。
あと、Rowって行だっけ?列だっけ?っていうのもわからなくなります。。。
Cells([行(=Row)インデックス], [列(=Column)インデックス])
Cells関数の引数は、行が1番目! 列は2番目!
Range関数とCells関数の違い
セルの値を取得するのにRange関数とCells関数の2つが使えるのはわかった。
じゃあ、どっちを使えばいいんだ??って疑問に思うのではないでしょうか。
結論から言えば、どっちでもいいのです。
値を取得したセル番地をA1、B1みたいに文字列で指定できるならRange関数を使えばいいし、取得するセル番地を動的に変えたいからCells関数の方が都合いいという場合もあるでしょう。
使う場面で使いやすい関数を使えばいいと思います。
Range関数とCells関数の主な違いをまとめておきます。
機能 | Range関数 | Cells関数 |
---|---|---|
セル番地を文字列で指定できる | ○ | × |
指定するセル番地を動的に変える | △ | ○ |
セルを範囲で指定する | ○ | × |
シート全体を指定する | × | ○ |
定義した「名前」でセルの範囲を指定できる | ○ | × |
まとめ
最後にこの記事で説明したことをまとめておきます。
- Excel VBAではRange関数かCells関数のどちらかを使ってセルの値を取得できる
- Range関数とCells関数は、それぞれの特長をふまえて、より適切な関数を選択するとよい
コメント