【初めてのVBA】04. エクセルVBA セルの値を取得する
独学でVBAを学んでいくなかで、
気づいたことをブログにまとめています。
前回、「ネットサーフィンのためのVBA」と題して、
恥ずかしながら初心者らしいプログラムを
掲載させていただきました。
今回は少しプログラムの深堀をしていこうと思います。
【目次】
エクセルVBA セルの値を取得する
やりたいことは
このようなデータを取得するプログラムです。
前回はこのようにセルの値を取得していました。
Sub ネットサーフィンプログラム()
MsgBox Range("A1").Value
MsgBox Range("A2").Value
MsgBox Range("A3").Value
MsgBox Range("A4").Value
End Sub
今回は、
前回も使用したRangeの使い方と
Cellsの使い方を深堀します。
Rangeオブジェクトの使い方
Rangeオブジェクトとは
Represents a cell, a row, a column, a selection of cells containing one or more contiguous blocks of cells, or a 3D range.
エクセルのひとつの セル、もしくは、複数のセル範囲を示します。
Range("A1")と記載すれば単一のセル(A1)を示し、
Range("A1:A4")と記載すればA1~A4までのセル範囲を示すことができます。
セルに文字を記載する方法
Range("A1").value = "TEST"
Rangeオブジェクトを使ったセルの表現方法
代表例 | 範囲 | 使用例 |
Range("A1") | セルA1 | Range("A1").value = "セル" |
Range("A1:B2") | セルA1,A2,B1,B2の範囲 | Range("C3:D4").value = "範囲" |
Range("A:A") | A列 | Range("B:B").value = "列" |
Range("1:1") | 1行目 | Range("2:2").value = "行" |
Range("A1").value = "セル"と記述するとセルA1に"セル"という文字が挿入されます。
Range("C3;D4").value = "範囲"と記述するとセルC3,C4,D3,D4に"範囲"という文字が挿入されます。
Range("B:B").value = "列"と記述するとB列に"列"という文字が挿入されます。
Range("2:2").value = "行"と記述すると2行目に"行"という文字が挿入されます。
Cellsオブジェクトの使い方
Cellsプロパティとは
Returns a Range object that represents the cells in the specified range.
Cellsで指定したセルのRangeオブジェクトです。
Cellsオブジェクトを使ったセルの表現方法
例えば、Cells(1,1)と記述すると、セルA1のRangeオブジェクトを示します。
つまり、Range("A1")とCells(1,1)は同じです。
RangeとCellsの使い分け
特徴を示します。
Range | Cells | |
単一セルの表現 | 可 | 可 |
複数セルの表現 | 可 | 不可 |
インデックス表現 | 不可 | 可 |
Rangeの特徴は、複数範囲のセルをまとめて表現することができます。
一方、Cellsは、単一セルではありますが、インデックスを使ってセルを表現することができます。
Cellsの有効な使い方
たとえば、A列の1行目から10行目までのセルに1~10の数値を指定したいとき、
このように記述することができます。
Sub test()
Dim i As Integer
For i = 1 To 10 then
Cells(i, 1).Value = i
Next
End Sub
前回プログラムの改良
前回はこのように記述していましたが、
今回の学習を踏まえると改良できそうです。
改良前
Sub ネットサーフィンプログラム()
MsgBox Range("A1").Value
MsgBox Range("A2").Value
MsgBox Range("A3").Value
MsgBox Range("A4").Value
End Sub
改良後
Sub ネットサーフィンプログラム()
Dim i As Integer
For i = 1 To 4
MsgBox Cells(i, 1).Value
Next
End Sub
改良後は、for分を使って冗長なプログラムを簡潔に記載することできるので、
改善としては大成功です。