VBAのCellsとRangeの違い使い分けやよくある間違いを徹底解説!

本日はVBAの入門としてCellsとRangeの使い分けを説明していきます。

VBA初心者にとって最初の関門とも言えるCellsとRangeですが、どちらをどのように使わけてよいのか?ということがいまいちわからないという人も多いと思います。

事例だったり、間違いやすい点についてもまとめましたので安心してついてきていただけたらと思います。まず、それぞれの主な特徴は以下の通りです。

タップできる目次

VBA Cellsの特徴

①行列ともに変数でセルを指定できる

②特定のセル範囲内で相対指定でセルを取得する

VBA Rangeの特徴

①複数の範囲が指定できる。

②開始セルと終了セルを指定できる

 

言葉だけだとよくわからないと思いますので実際に簡単なコードを用いて解説します。

VBAでCellsの使い方

Cellsの一番の特徴としてはやはり①なのではないかと思います!
ループ等で行列の位置をずらしながらセルの操作で役に立ちます。
例えばこのような感じ

Dim intRow As Integer '行の値
Dim intCol As Integer '列の値
Dim intI As Integer

intI = 1
For intRow = 2 To 10 
 For intCol = 2 To 10
  Cells(intRow, intCol) = intI
  intI = intI + 1
 Next
Next

これで2行2列~10行10列までを1から加算するようになります。

変数で行列を設定できるので位置が変動するような時に使うときはCellsが便利です。

VBAでCellsとRangeの並行使用方法

またCellsとRangeを使って範囲を指定することも可能です。

Const intStartRow As Integer = 2
Const intStartCol As Integer = 2
Const intEndRow As Integer = 10
Const intEndCol As Integer = 10

Range(Cells(intStartRow, intStartCol), Cells(intEndRow, intEndCol)).Interior.Color = vbRed

2行2列から10行10列までを赤色で塗りつぶすというコードです。
Rangeを使えば範囲を指定できます。行列を数値で表すためにCellsを使えば簡単に範囲を指定して処理することが可能です。

ここでとっても重要な注意事項があります。
上記のコードは以下のようにシート内のコードに書いています。

このコードを「標準モジュール」にそのままコピペすると狙い通りに動かない時があります。
エラーが出たり、予期せぬシートに塗りつぶしがかかったり!!

原因は「シートの指定をしていないからです」←知っている人は「当然」と思いますよね
昔、私はこれでとても苦労しました。

特にRangeの中のCellsへの指示が抜けていてそれを見つけるのにとても苦労しました。
ですので、標準モジュールに書くときは可読性も考えてWithステートメントを使いましょう。

使い方は簡単、with~End Withで囲い、withの後にWorksheetsコレクションでシート名を指定しましょう
そしてそれぞれのrange,Cellsの前にに必ず「.」をいれましょう

Sub sumple4()
Const intStartRow As Integer = 2
Const intStartCol As Integer = 2
Const intEndRow As Integer = 10
Const intEndCol As Integer = 10

  With Worksheets("Sheet1")
    .Range(.Cells(intStartRow, intStartCol), .Cells(intEndRow, intEndCol)).Interior.Color = vbRed
  End With
End Sub

CellsやRangeはとても基本的なプロパティですので、しっかりと理解しておきましょう!!

最後までお読みいただきありがとうございました。

  • URLをコピーしました!
  • URLをコピーしました!
タップできる目次