Excelを編集する際に複数のセルを範囲選択したり、選択範囲を変更したりといった作業はほぼ必ず発生しますが、マウスやキーボードで操作するのは手間がかかりますよね。ここではExcel VBAでRangeオブジェクトによってセルを範囲選択する方法を詳しく解説していきます。
Rangeプロパティとは
Rangeとは、Excelのワークシート内で指定したセルの範囲を表すオブジェクト、あるいは同名のプロパティです。
Rangeオブジェクトを使用することで、マウスやキーボードでセルを範囲選択するのと同じ操作をVBAのコード上で再現することができます。
セルを範囲選択する際に使用するオブジェクトとして、RangeのほかにCellsというものもあります。
RangeとCellsの違いは?
RangeとCellsはどちらもセルを範囲選択することができますが、指定する範囲の書き方などにいくつかの違いがあります。それぞれの特徴を見ていきましょう。
Rangeの特徴
- 範囲に名前を定義して呼び出せる
- 複数の範囲が指定できる
- 開始セルと終了セルを指定して選択できる
Cellsの特徴
- 変数を使用して範囲が指定できる
- シート全体を範囲として指定できる
- Rangeの中に入れて範囲を表せる
Rangeの使い方は?具体例・サンプルコードで解説
それでは実際に、Rangeの使い方について解説していきます。まずは、指定したセルを選択する方法から見ていきましょう。
セルを指定して選択する
まずは最も基本的な、指定したセルを選択する方法から解説します。
セルを指定して選択するときは、RangeオブジェクトにSelectを付けます。
例として、C4セルを選択したい場合の書き方は以下のとおりです。
【サンプルコード】
Sub SingleRange()
Range("C4").Select 'C4の部分を書き換えることで任意のセルを指定できます
End Sub
範囲を指定して複数のセルを選択する
上のサンプルでは1つのセルだけを選択していますが、“A1:D6”のように、開始セルと終了セルを指定することで、複数のセルを範囲選択することも可能です。
【書き方】
Range("開始セル:終了セル").Select
【サンプルコード】
Sub RangesSel1()
Range("A1:D6").Select
End Sub
【実行結果】
複数の範囲を指定して離れたセルを選択する
セルの範囲を記述する部分には、カンマで区切ることで別々の範囲を複数指定できます。
【書き方】
Range("開始セル1:終了セル1,開始セル2:終了セル2,...").Select
たとえば、A1からC4までのセルとE3からG7までのセルを指定する場合には、以下のように書きます。
【サンプルコード】
Sub multiRangesSel()
Range("A1:C4,E3:G7").Select 'A1からC4までとE3からG7までのセルがそれぞれ選択されます
End Sub
【実行結果】
編集するセルの範囲が決まっている場合は、このように複数の範囲を一括で選択できることで、離れたセルに同一の処理を行うといったことができます。
範囲に定義した名前から指定して選択する
Excelのワークシート内では、選択したセルに名前を付けることができます。そして、Rangeを使用する際にはその名前で指定することも可能です。
まずは範囲に名前を定義しましょう。A1からC4セルまでをマウスでドラッグして選択し、その状態で右クリックして表示されるメニューから「名前の定義」を選択してください。
【セル選択時のメニュー】
【サンプルコード】
Sub namedRangesSel()
Range("サンプル").Select
End Sub
【実行結果】
補足: Rangeを使用して指定したセルに名前を付ける方法
先ほどの指定したセルへの名前の定義については、Nameを使うことで実現できます。
せっかくVBAで作業の効率化を図っているのに、セルに名前を付けるときは一つ一つ選択して右クリックして…というのは効率的ではありませんよね。
ここまでで解説してきたセルの選択の方法と組み合わせてみましょう。
【セルに名前を付けるコードの書き方】
Range("セルの範囲").Name = "名前"
【サンプルコード】
Sub defRangesName()
Range("A1:D5").Name = "サンプル"
End
セルの範囲を変更する方法
作業中に選択するセルの範囲を変更したい場合もあるかと思います。その場合はResizeというプロパティを使用します。
【書き方】
Range("セルの範囲").Resize(変更後の行数, 変更後の列数)
実際に選択範囲の大きさを変更してみましょう。以下のサンプルコードでは1つのセルを選択した状態からリサイズで選択範囲の大きさを変更しています。
【サンプルコード】
Sub resizeRanges()
Range("A3").Resize(4, 3).Select
End Sub
【実行結果】
ResizeプロパティではRangeのようにセルの範囲をどこからどこまでと指定するのではなく、数値で何行の何列ぶんというように指定する書き方になるので注意が必要です。
選択範囲の位置を移動する方法
選択範囲の大きさは変えずに、選択する位置だけを移動したいという場合もあるでしょう。その場合にはOffsetを使用することで、選択範囲の開始位置を動かすことができます。
【書き方】
Range("セルの範囲").Offset(移動する行数, 移動する列数)
Resizeと同様にOffsetも、変更後の位置は数値で指定します。こちらも同様にRangeとの書き方の違いには注意しましょう。
実際に、A1からD5までのセルを選択した状態から、2行2列ぶんだけ移動した場所を選択してみましょう。
【サンプルコード】
Sub offsetRanges()
Range("A1: D5").Offset(2, 2).Select
End Sub
【コード実行前】
【コード実行後】
Rangeで指定したセルの値を取得・変更する方法
実際の業務ではセルを選択するだけではなく、値を取得したり他の値に変更したりといった操作が必ず伴います。ここでは、一つのセルの値を操作する方法と、範囲選択した複数のセルの値を操作する方法について解説していきます。
セルの値を取得・変更する
セルの値を取得・変更する場合には、RangeオブジェクトにValueプロパティを付けます。
【Valueプロパティの使い方はコチラ】
【Excel VBA】セルの値を取得・上書きするValueプロパティの使い方を解説既に入力されている値を表示する場合と、セルに値を新しく入力したり上書きしたりする場合の書き方は以下のとおりです。
【書き方】
'セルに入力されている値を取得する場合
Range("セルの範囲").Value
'セルの値を変更する場合
Range("セルの範囲").Value = 変更後の値
試しに、C3セルに文字列を入力して、そのセルの文字列をメッセージボックスに表示する処理を行います。
【サンプルコード】
Sub rangeValueChange()
Range("C3").Value = "テックマニア編集部" 'C3セルに"テックマニア編集部"という文字列を入力
MsgBox Range("C3").Value '現在のC3セルの値をメッセージボックスに表示
End Sub
【実行結果】
Rangeで指定したセルをクリア(値や書式などを消去)する方法
既に入っている値を一括で消去したい場合や、書式をリセットしたい場合などにはClearメソッドを使用します。
指定したセルに入っているすべての情報を削除する場合と、特定の情報だけを削除する場合で使用するメソッド名が変わります。
【書き方】
'セルの中身を全て削除する
Range("セルの範囲").Clear
'セルのコメントを削除する
Range("セルの範囲").ClearComments
'セルの値と数式を削除する
Range("セルの範囲").ClearContents
'セルの書式を削除する
Range("セルの範囲").ClearFormats
'セルのメモを削除する
Range("セルの範囲").ClearNotes
'セルのアウトラインを削除する
Range("セルの範囲").ClearOutline
'セルのハイパーリンクを削除する
Range("セルの範囲").ClearHyperlinks
それでは実際に値を削除してみましょう。まずは、以下のコードでA1からD9のセルに1以上100以下のランダムな整数を入れてみます。
【ランダムな整数を入れるコード】
Sub ClearRanges()
For Each c In Range("A1:D9") 'A1からD9セルの範囲を指定して、範囲内のセル数の分だけ繰り返し処理する
c.Value = "=RANDBETWEEN(1, 100)" 'セル内に数式で乱数を入力
If c.HasFormula Then '以下のIf文で入力した数式の結果値をセルに再代入
c.Value = c.Value
End If
Next c
End Sub
【乱数入力後】
For Each…Nextという文で繰り返し処理を行うことで、指定した範囲のセルの一つ一つに“=RANDBETWEEN(1, 100)”という数式を入力しています。
この状態から、51以上の値が入っているセルだけを一括で削除してみます。
【51以上の値を削除するコード】
Sub ClearPartialRanges()
For Each c In Range("A1:D9")
If c > 50 Then 'セルの値が50より大きいときだけ下の行の処理が有効になる
c.Clear 'cはA1からD9までの各セルの値
End If
Next c
End Sub
【実行結果】
全ての値を削除する場合は、上のコードからIf…ThenとEnd Ifの行を削除するだけでOKです。
【範囲内の全ての値を削除するコード】
Sub ClearRanges()
For Each c In Range("A1:D9")
c.Clear
Next c
End Sub
【まとめ】Rangeでできる様々な処理
ここでは、Rangeを使ったセルの範囲選択や、選択した範囲内でのいくつかの操作について解説してきました。
以上で解説してきたことの他にも、Rangeを使うことでExcel VBAでは様々な処理が実現できます。
代表的なものとしては、以下のようなものが挙げられます。
- 指定した範囲をコピーする
- 指定した範囲を配列に変換する
- 指定した範囲をFindで検索する
- 指定した範囲をSortでソートする
Rangeの使い方を理解することはExcel VBAを使いこなすには必須です!ぜひRangeを使いこなして、業務の効率化を実現しましょう!
関連記事
VBAの勉強方法は?
書籍やインターネットで学習する方法があります。昨今では、YouTubeなどの動画サイトやエンジニアのコミュニティサイトなども充実していて多くの情報が手に入ります。
そして、より効率的に知識・スキルを習得するには、知識をつけながら実際に手を動かしてみるなど、インプットとアウトプットを繰り返していくことが重要です。特に独学の場合は、有識者に質問ができたりフィードバックをもらえるような環境があると、理解度が深まるでしょう。
ただ、VBAに限らず、ITスキルを身につける際、どうしても課題にぶつかってしまうことはありますよね。特に独学だと、わからない部分をプロに質問できる機会を確保しにくく、モチベーションが続きにくいという側面があります。独学でモチベーションを維持する自信がない人にはプログラミングスクールという手もあります。費用は掛かりますが、その分スキルを身につけやすいです。しっかりと知識・スキルを習得して実践に活かしたいという人はプログラミングスクールがおすすめです。
プログラミングスクールならテックマニアがおすすめ!
ITスキル需要の高まりとともにプログラミングスクールも増えました。しかし、どのスクールに通うべきか迷ってしまう人もいるでしょう。そんな方にはテックマニアをおすすめします!これまで多くのITエンジニアを育成・輩出してきたテックマニアでもプログラミングスクールを開講しています。
<テックマニアの特徴>
・たしかな育成実績と親身な教育 ~セカンドキャリアを全力支援~
・講師が現役エンジニア ~“本当”の開発ノウハウを直に学べる~
・専属講師が学習を徹底サポート ~「わからない」を徹底解決~
・実務ベースでスキルを習得 ~実践的な凝縮カリキュラム~
このような特徴を持つテックマニアはITエンジニアのスタートラインとして最適です。
話を聞きたい・詳しく知りたいという方はこちらからお気軽にお問い合わせください。