【Excel VBA入門】Cellsによるセル範囲の指定、操作方法
こんにちは、吉池(@valmore_myoshi)です。
ひとつ前の記事ではセル範囲の指定方法としてRangeを取り上げましたが、今回はCellsを解説します。CellsもVBAで頻繁に使うオブジェクトなので、一度理解してしまえばさまざまな自動化に適用できます。
本記事では、Cellsの基本的な使い方はもちろん、Rangeとの違いについてもみていきましょう。すべて理解できるようになればCellsを使ったセル操作を自由に行えるようになります。
目次
Cellsとは
Cellsとはセルを指定する方法のひとつです。行番号(行インデックス)と列番号(列インデックス)を指定して使います。
‘ A1の行インデックスは1、列インデックスも1 Cells(1, 1).Select
CellsとRangeの違い、使い分け
セル範囲を指定する方法にはほかにもRangeがあります。Cellsがインデックスを指定するのに対し、Rangeは以下のように文字列でセル範囲を指定します。
‘ A1を指定 Range("A1") ‘ A1からC3までの範囲を指定 Range("A1:C3")
セルの指定方法からわかる通り、Cellsでは1つのセルしか明示的に指定できません。一方Rangeは複数のセル範囲を指定できます。
これだけではRangeのほうが使い勝手がよさそうですが、Cellsにも得意分野があります。それがインデックスの指定に変数を使えることです。
例えば、A列のセルに一つずつ違う値を入れるケースを考えてみましょう。
「みかん」「りんご」「バナナ」と入れる場合、Rangeだと下記のように一つずつ指定する必要があります。しかし、Cellsでは変数を使ってより簡潔に書けます。
‘ Rangeを使う場合 Dim foods(1 To 3) As String foods(1) = "りんご" foods(2) = "みかん" foods(3) = "バナナ" Range("A1").Value = foods(1) Range("A2").Value = foods(2) Range("A3").Value = foods(3) ‘ Cellsを使う場合 Dim foods(1 To 3) As String Dim i As Integer foods(1) = "りんご" foods(2) = "みかん" foods(3) = "バナナ" For i = 1 To 3 Cells(i, 1).Value = foods(i) Next
上記のように変数iをインデックスに使うことで、Forループなどと組み合わせてセル範囲を指定できるのがCellsの強みです。
CellsとRangeの使い分け方をまとめると以下のようになります。
- 指定する範囲が固定の場合はRange、変動する場合はCells
- 指定するセルが1つの場合はCells、2つ以上であればRange
- 行ごと、列ごとに範囲指定する場合はCells
Rangeについて詳しく知りたい方はこちらの記事をご覧ください。
【Excel VBA入門】Rangeでセル範囲を指定、操作する方法
Cellsを使った範囲指定の方法
これまでにいくつか見てきましたが、Cellsの指定方法はいくつかあります。用途にあった指定方法を選びましょう。
インデックスで指定する
まずは基本のインデックスで指定する方法です。行インデックスと列インデックスを入れると一つのセルを指定できます。インデックスを指定しないと、シート全体を指定します。
‘ A1を選択 Cells(1, 1).Select ‘ シート全体を選択 Cells.Select
変数を使って指定する
変数を使ったセル範囲の指定はCellsならでは。基本的にループ処理と組み合わせて使うことで簡潔に記述できます。
例えば、部署と名前を組み合わせた下記のような表を考えてみます。
[部署, 名前]のように部署と名前が入った配列を3つ持つ二次元配列で考えると、変数を使って下記のように書けます。
Dim items(2, 1) As String Dim i As Integer, j As Integer items(0, 0) = "営業部" items(0, 1) = "山田 太郎" items(1, 0) = "営業部" items(1, 1) = "田中 次郎" items(2, 0) = "開発部" items(2, 1) = "加藤 三郎" For i = 2 To 4 For j = 1 To 2 Cells(i, j).Value = items(i - 2, j - 1) Next Next
Offsetを使った相対位置の指定
Offsetを使えば相対位置を指定できます。指定した位置と相対的に離れているセルも取得したいといったときに便利です。
‘ A1から2行下3列右のD3を指定 Cells(1, 1).Offset(2, 3).Select
Rangeで指定した範囲内の指定
RangeとCellsを組み合わせてセル範囲を指定することも可能です。通常Cellsは1行目を行インデックスで1、A列を列インデックスで1と表しています。
しかし、Rangeで先にセル範囲を指定すると、その範囲内の左上のセルがインデックスの起点となります。つまり、Rangeで指定した”B2:D5”のセル範囲内でCells(1, 1)を指定すると、B2のセルが指定されます。
‘ B2からD5の範囲内で左上のB2がCellsインデックスの起点となる Range("B2:D5").Cells(1, 1).Select
Cellsで指定した範囲の操作
Cellsで範囲指定したあとは、なんらかの操作をするはずです。本記事では、選択や入力など基本的なセル操作を見ていきます。
範囲を選択する
セルを選択するにはSelectメソッドを使います。
‘ A1を選択 Cells(1, 1).Select
範囲に入力する
セルに値を入力するにはValueプロパティに代入します。
‘ A1に10を代入 Cells(1, 1).Value = 10
範囲をコピーする
セルをコピーするにはCopyメソッドを使います。Copy先のセル範囲を指定することでペーストできます。
‘ A1をコピーし、C3にペースト Cells(1, 1).Copy Cells(3, 3)
範囲をクリアする
セルをクリアするにはClearメソッドを使います。
‘ A1のセルをクリア Cells(1, 1).Clear
まとめ
Cellsを使ったセル範囲の指定、操作方法を解説しました。VBAでExcel操作を自動化するときにCellsを使わないことをほぼありません。
頻繁に使うオブジェクトだからこそ、きちんと理解しましょう。使えるようになってしまえばより効率的に自動化プログラムを作れるようになります。