【Excel VBA入門】Rangeでセル範囲を指定、操作する方法

【Excel VBA入門】Rangeでセル範囲を指定、操作する方法

こんにちは、吉池(@valmore_myoshi)です。

VBAを使ってExcel操作を自動化するときに欠かせないのが範囲指定です。Excelデータを転記するにしろ、新たに入力するにしろ、操作するセルを指定する必要があるからです。

今回はセル範囲の指定方法としてRangeを取り上げます。Cellsでセルを指定することもできますが、それぞれ使いどころが異なります。

本記事では、Rangeの使い方はもちろんCellsとの使い分け、そして指定した範囲の操作方法まで解説します。

Rangeとは

Rangeはセル範囲を指定するオブジェクトで下記のように使います。

‘ セルA1を指定
Range("A1")

‘ セルA1からC5までの範囲を指定
Range("A1:C5")

‘ セルA1を選択
Range("A1").Select

‘ セルA1に代入
Range("A1").Value = 10

セル範囲を指定し、値を入力したり、コピーといった操作を行えます。

RangeとCellsの違い、使い分け

セル指定の方法にはほかにもCellsがよく使われます。Cellsは下記のように使います。

‘ セルA1を指定。Cells(行番号, 列番号)のように指定する
Cells(1, 1)

‘ セル全体を指定
Cells.Select

‘ セルA1を選択
Cells(1, 1).Select

‘ セルA1に代入
Cells(1, 1).Value = 10

Rangeがまとまったセル範囲を指定できるのに対し、Cellsでは1つのセルしか指定できません。一方、Cellsではセルの指定に変数を使用できるのに対し、Rangeでは文字列を使用する必要があります。

RangeとCellsの使い分け方をまとめると以下のようになります。

  • 指定する範囲が固定の場合はRange、変動する場合はCells
  • 指定するセルが1つの場合はCells、2つ以上であればRange
  • 行ごと、列ごとに範囲指定する場合はCells

【2019/5/10追記】
Cellsを使ったセル指定、操作方法ついてもまとめました!

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

Rangeを使った範囲の指定方法

Rangeには”A1:C5″といった文字列による指定方法のほかにも、さまざまな範囲指定方法があります。

特定の範囲を指定する

一つのセルあるいはまとまったセルを指定するには文字を使用します。

‘ セルA1を指定
Range("A1")

‘ セルA1からC5までの範囲を指定
Range("A1:C5")

複数の範囲を指定する

複数の範囲を指定するにはカンマで区切ります。

‘ セルA1からC3、E5からG7の2つの範囲を指定
Range("A1:C3,E5:G7").Select
実行結果

名前を使って指定する

特定のセル範囲に名前をつけて、Rangeで指定することもできます。

まずはセル範囲に名前をつけてみましょう。

ここではセル範囲を「テスト」と名付けました。名付けた範囲をRangeから呼び出します。

Range("テスト").Select
実行結果

Offsetを使った相対範囲の指定

特定のセル範囲からの相対位置を指定するにはOffsetを使用します。例えば”A1:C3”のセル範囲から大きさを変えずに2行下、3列右に移動する場合は下記のようになります。

‘ A1:C3から2行下3列右のD3:F5の範囲を指定
Range("A1:C3").Offset(2, 3).Select
実行結果

Rangeで指定した範囲の操作

特定の範囲を指定した後は選択や入力といった操作を行います。基本的な操作をまとめました。

範囲を選択する

すでにこれまでのサンプルで出てきましたが、範囲を選択するにはSelectを使います。

‘ A1からC3までの範囲を選択
Range("A1:C3").Select

範囲に入力する

指定した範囲に文字を入力するにはValueプロパティに値を代入します。

‘ セル範囲A1からC3に10を代入
Range("A1:C3").Value = 10
実行結果

範囲をコピーする

指定したセル範囲をコピーするにはCopyメソッドを使用します。Copyメソッドにはコピー先のセルを指定しましょう。

‘ セル範囲A1:C3の値をE5:G7の範囲にコピー
Range("A1:C3").Copy Range("E5")
実行結果

範囲をクリアする

範囲をクリアするにはClearメソッドを使います。

‘ セル範囲A1:C3の値をクリア
Range("A1:C3").Clear

範囲をソートする

範囲をソートするにはSortメソッドを使います。並び変えるフィールドと並び替え順序、見出しの有無を指定すれば基本的にOKです。

今回は以下の商品表サンプルを用意しました。

Sortメソッドを使って商品番号の昇順にソートします。

‘ Key1に並び替えフィールド、Order1に並び替え順序、Headerに見出しの有無を指定
‘ xlAscending: 昇順, xlDescending: 降順
Range("A1:E11").Sort Key1:=Range("B2"), _
        Order1:=xlAscending, Header:=xlYes
実行結果

まとめ

Rangeを使った範囲指定やセル操作を解説してきました。セルの指定方法はRangeとCellsの2つありますが、指定する範囲が固定あるいは複数の場合はRangeが適しています。

VBAでExcel操作を自動化するうえでRangeは頻繁に使うので必ずマスターしましょう!