【Excel VBA入門】Cellsによるセル範囲の指定、操作方法

【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を使わないことをほぼありません。

頻繁に使うオブジェクトだからこそ、きちんと理解しましょう。使えるようになってしまえばより効率的に自動化プログラムを作れるようになります。