Excelで作業するとき、セルを範囲選択するという操作はほぼ必ずといっていいほど発生しますよね。よく行う操作ほどVBAで自動化するメリットが多いといえます。
VBAにてセルを選択する場合、検索してみるとRangeとCellsというオブジェクトとプロパティが見つかります。
でも、いったいどっちがどうなのか? 使い分けが難しいですよね。この記事では「Rangeとは何か」や「RangeとCellsの違い」という基本的な内容から、
- Resizeでセルの範囲を変更する方法
- Offsetでセルの範囲を指定する方法
- Valueで値を取得変更する方法
- 範囲をクリアする方法範囲をコピーする方法
- 範囲を配列に変換する方法Findで範囲を検索する方法
- Sortで範囲をソートする方法
という応用的な内容まで解説します。
本記事を読み終える頃には、目的に応じたRangeとCellsの使い分けや、Rangeを利用した範囲選択が自由自在にできるようになっていますよ!
Rangeとは
Rangeとは、セルの範囲を指定するときに使うオブジェクトです。
例えばA3からB5のセルを赤にしたいとき、A3からB5までドラッグして範囲指定してから赤にしますよね。その範囲を指定する操作をコードで実現します。
Rangeで選択した後は、もちろんセルの色だけでなく文字色を変えたり罫線をいれたりできます。範囲を選択するモノとしては、Cellsプロパティもあります。
何が違うのか、比較しながら見てみましょう。
Rangeはココが違う!
RangeはCellsと比較すると、以下の特徴があります。
- 範囲につけた「名前」で呼び出せる
- 複数の範囲が指定できる
- 開始セルと終了セルを指定できる
Cellsはココが違う!
一方、Cellsは以下の特徴があります。
- 変数で位置を指定できる
- シート全体を指定できる
他にもありますがこの辺りが主な特徴ですね。
使い分け例
ひととおり機能が分かったところで、どういった場合にどちらを使い分けるのかを見てみましょう。
使い分け1:範囲は固定か変動か?
帳票や伝票であればレイアウトが変わらないのでRangeが適しています。実行してみないと範囲が決まらない場合はCellsを使います。
使い分け2:範囲は1つか複数か?
A3からB6と、C9からD12といった、複数の範囲を選択するのはRangeにしかできません。
使い分け3:シート全部、行または列まるごとの場合
無条件でこのような指定をする場合、Cellsを使います。
これくらいにして、実際の使用例を次から見ていきます。
Rangeの使い方
早速、Rangeの使い方を順に見ていきましょう!
Selectでセルを指定する方法
1つだけセルを選択したいとき、このようになります。
[書式]
Range(“セル”)
[使用例]
Sub RangeSample1() Range("A3").Select End Sub
[実行結果]
VBEで実行すると、A3が選択されていることがわかります。
背景色をつけるときはこうです。
[使用例]
Sub RangeSample2() Range("A3").Interior.Color = RGB(250, 0, 0) End Sub
[実行結果]
複数のセルを範囲で指定する方法
先ほどは1つのセルを選択しましたが、今度は開始と終了を指定して範囲指定をしましょう。
[書式]
Range(“開始セル:終了セル”)
[使用例]
Sub RangeSample3() Range("A3:D6").Select End Sub
[実行結果]
もちろん、先ほどの例を応用して、範囲内を着色することも可能です。
複数の独立したセルを指定する方法
開始セル1から終了セル1、開始セル2から終了セル2といった感じで、複数の範囲も選択できます。
[書式]
Range(“開始セル1:終了セル1,開始セル2:終了セル2”,・・・・).Select
[使用例]
Sub RangeSample4() Range("A3:B6,C9:D12").Select End Sub
[実行結果]
2つ以上の範囲も選択可能です。
範囲につけた名前で指定する方法
範囲に名前をつけることができ、さらにRangeでその名前を指定できます。A3からB5をドラッグして反転させたのち右クリックして「名前の定義」を選択してください。
そこで名前を「テスト」とします。その名前付き範囲をRangeで指定することも可能です。
[書式]
Range(“範囲の名前”)
[使用例]
Sub RangeSample5() Range("テスト").Select End Sub
[実行結果]
セルを変数で指定する方法
Rangeメソッドにおいて、変数を使って範囲選択することも可能です。
[使用例]
Sub RangeSample6() For i = 1 To 5 Range("A1:A" & i).Select Next End Sub
[実行結果]
ただし、変数を使った可変の範囲を指定するときは、Cellsを使うのが一般的です。
[使用例]
Sub RangeSample7() Dim i as Integer For i = 1 to 5 Range(Cells(1, 1), Cells(i, 1)).Select Next End Sub
実行結果は同じです。
Resizeでセルの範囲を変更する方法
一度選択した範囲のサイズを変えることだってできます。A3からB6という4行2列の範囲選択を、5行5列に広げましょう
[書式]
Range(“範囲”).Resize(新しい行数, 新しい列数)
[使用例]
Sub RangeSample8() Range("A3:B5").Resize(5, 5).Select End Sub
[実行結果]
実行後の結果しか見えないので動作を実感できませんが、A3からB5の範囲がA3を起点として5行5列になったのがわかります。
Offsetでセルの範囲の位置を変更する方法
A3からB6まで指定した範囲を、大きさはそのままで動かすことができます。
[書式]
Range(“範囲”).Offset(行方向に動かすセル数,列方向に動かすセル数)
[使用例]
Sub RangeSample9() Range("A3:B5").Offset(2, 3).Select End Sub
[実行結果]
これも結果のみの確認です。A3からB5の範囲が、A3を起点として2行3列動いたのがわかります。
Cellsを使ってセルを指定する方法
Cellsを使ってセルを指定する方法はこちらで詳しく解説しているので、ぜひ確認してください。
Valueで値の取得と変更をする方法
RangeオブジェクトからValueプロパティを呼び出すことで、セルの値を取得もしくは変更することができます。
サンプルコードで確認しましょう。
Sub RangeSample10() ' セルの値の変更 Range("A1").Value = "侍エンジニア" ' セルの値の取得 MsgBox Range("A1").Value End Sub
実行結果:
範囲をクリアする方法
指定したセル範囲をクリアするにはRangeオブジェクトのClearメソッドを使います。クリアする対象によって使うメソッドが変わってきます。目的にあったメソッドを使うようにしましょう。
メソッド | 説明 |
---|---|
Clear | 全て |
ClearComments | コメント |
ClearContents | 値と数式 |
ClearFormats | 書式 |
ClearNotes | コメント |
ClearOutline | アウトライン |
ClearHyperlinks | ハイパーリンク |
ClearHyperlinksについては、Excel2010以降で使用できます。サンプルコードで確認しましょう。
以下のような状態をクリアします。
Sub RangeSample11() Range("A1:B2").Clear End Sub
実行結果:
範囲をコピーする方法
指定した範囲をコピーする方法については、こちらで詳しく解説していますので、ぜひ参考にしてください。
範囲を配列に変換する方法
指定した範囲の値を配列に格納したい場合があります。範囲の値を配列に格納する方法については、こちらで詳しく解説していますので、ぜひ参考にしてください。
Findで範囲を検索する方法
指定した範囲にある値が含まれているか検索したい場合があります。そんな場合はFindメソッドを使って検索します。
Findメソッドの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
Sortで範囲をソートする方法
指定した範囲を順番に並べ替えたい場合があります。そんな場合はSortメソッドを使って並べ替えます。
Sortメソッドの使い方については、こちらで詳しく解説していますので、ぜひ参考にしてください。
VBAの将来性
このように思っている人は多いでしょう。
VBAの用途はさまざまで、
- VBAのスキルがあれば転職できるのでは?
- 業務効率化のスキルは需要が高そうだから
などが上げられます。確かに、業務効率化はどこの企業も目指していて、需要が高いように見えます。ただ、VBAを扱えることが強みになるかといわれると、すこし疑問があります。
VBAは基本的にエクセル上でしか使用することができません。しかし、最近では社内書式をスプレッドシートで管理している企業も増えており、今後エクセル自体の需要が少なくなってしまう可能性も考えられます。
そうなってしまうと、VBAを習得しても活躍の場が限られてしまいますよね。そう考えると将来的にVBAの需要はあまり高くないといえます。
ではVBAを学んでいる人はどうすればいいのでしょう。VBAの将来性や今後の対策などをこちらの記事でまとめているのでぜひご確認ください。
まとめ
この記事では、Rangeオブジェクトについて解説しました。Excelの操作においてセルを範囲選択することは多々あるので、これがVBAによって自動化できればとても便利ですよね。
今回はセルの着色しか触れませんでしたが、その他にもできることは沢山あります。ぜひ、みなさんも試してみてくださいね!