ExcelマクロVBA入門
第11回.RangeとCellsの使い方

Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
最終更新日:2019-03-03

第11回.RangeとCellsの使い方


VBA Range Cells


VBAではセルを指定する方法としてRangeCellsがあります、


RangeもCellsも、どちらもRangeオブジェクトで、セルを指定するものです、

どちらを使ったらよいのでしょうか、
どう使い分けたらよいのでしょうか、

実際のマクロVBA記述では、RangeとCellsを使い分ける必要があります。
RangeとCellsの使い方について解説をします。



RangeとCellsの基本的な使い分け

Rangeを使うのは
・固定位置のセルの場合
・セル範囲(複数セル)の場合
・名前定義を使う時

以上のいずれかになります。
単一セル(一つの)セルの指定で変数を使う場合は、Cellsを使うようにします。

Cellsを使うのは
単一(一つの)セルを指定する場合

複数セルであるセル範囲や名前定義をCellsで指定することはできません。


以下で、使用する場面に応じて実際の書き方を見ていきます。


固定セルの指定

最初に書いたように、固定位置で条件によって変化する事が無い場合は、

Range("B2")
Range("A1:C5")
Range("1:5")
Range("A:C")

このように書けば良いでしょう。

また、名前定義を使って、

Range("名前定義の名前")

この名前定義を使う場合は、Rangeでしか指定できません。



Rangeに変数は使わないようにします

時々、こんな書き方を見かけます、

Range("A" & i)

iは変数で、数値が入っている訳ですが、
(変数については、次回に説明します。)

このような使い方は避けましょう。
はっきり言って、見苦しいのです。
見苦しいとは、見ずらいということです。

そして、、実行速度も僅かではありますが遅くなります。
つまり、このような記述をする理由が見当たらないという事になります。
Cellsがあるのですから、これを使うようにしましょう。

とはいえ、
Rangeに変数を使う場面として、これならありかなという場面としては
繰り返し処理の中ではなく、範囲の最後が変数にはいっているような場合でしょうか。
変数の、lastRowに最後の行数が入っているとして、その範囲に何か設定するような場合。

Cellsを使うと、
Range(Cells(2, 1), Cells(lastRow, 1)) = ""
Range(Cells(2, 3), Cells(lastRow, 3)) = ""

Rangeだけで書くと、
Range("A1:A" & lastRow) = ""
Range("C1:C" & lastRow) = ""

これなら、どちらもありだとは思います。
特に、後々に出てきますがRangeやCellsにシート指定をするようになると、
Rangeで書くほうが記述がかなり短く済むので使っても良いと思います。



1つのセルを指定する場合

まずは、1つのセルを指定する場合の書き方の基本は、

Cells(行, 列)

このように書いて下さい。
列は、数字だけでなく、列記号も使えます。


Cells(5, 3)
Cells(5, "C")

どちらで書いても同じC5セルになります。

※上記では固定数値で書いていますが、
  マクロVBAではこの数値部分が変数になる事が多くなります。

変数 i に数値が入っているとして、
Cells(5, i)
このように書きます。



セル範囲(複数セル)を指定する場合

セル範囲(複数セル)の場合の書き方の基本は、

Range(始点セル, 終点セル)

この、始点セルと終点セルに、Cellsを指定します。

Range(Cells(行, 列), Cells(行, 列))

このように書きます。

例えば、
A1セルから、A5セルなら
Range(Cells(1, 1), Cells(5, 1))
A1セルから、C1セルなら
Range(Cells(1, 1), Cells(1, 3))
A1セルから、C5セルなら
Range(Cells(1, 1), Cells(5, 3))

このようになります。

※上記では固定数値で書いていますが、
  マクロVBAではこの数値部分が変数になる事が多くなります。

変数 i に数値が入っているとして、
Range(Cells(1, 1), Cells(i, 1))
Range(Cells(1, 1), Cells(1, i))
このように書きます。



複数行全体、複数列全体の指定

複数行の場合、1行から5行なら、
Range(Rows(1), Rows(5))

複数列の場合、1列(A列)から3列(C列)なら、
Range(Columns(1), Columns(3))

こののように指定します。

※上記では固定数値で書いていますが、
  マクロVBAではこの数値部分が変数になる事が多くなります。

変数 i に数値が入っているとして、
Range(Rows(1), Rows(i))
Range(Columns(1), Columns(i))
このように書きます。



RangeとCellsの使い分け方のまとめ

RangeとCellsの使い分け方について、

簡潔に一言で言うなら

変数を使う時はCells、Rows、Columnsを使用すると言う事です。



RangeとCellsは、VBAの基本中の基本であり、これが理解できなければVBAは何も始まりません。
本サイト内には多くの関連ページがありますので順に学んでください。

RangeとCellsの基本の関連記事

第8回.セルに文字を入れるとは(Range,Value)
前回実行したマクロを、もう少し詳しく見てみましょう。どうして、それでセルに値がはいるのか どうやって読んだらよいのか 少しだけ詳しく解説します。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
第9回.Rangeでのセルの指定方法
前回までに出てきたRangeの使い方は、Range("A1") で、1つのセルを指定する場合でした。では、複数のセル(つまりセル範囲)を指定する場合どうするか。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
第10回.Range以外の指定方法(Cells,Rows,Columns)
Rangeの指定で、あらゆるセルおよびセル範囲は指定できるのですが、マクロで使う場合は、ちょっと使いづらい場合があります。もっと、プログラムっぽい(笑)指定方法があります。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第31回.セルの書式(表示形式,NumberFormatLocal)
セルは、表示形式を指定することで、セルに入っている値は同じ値でも色々な見え方をさせる事が出来ます、セルの値はそのままで、見た目だけをユーザーに見やすい形にすることが出来ます。同じ数値の、12345でも 12345、12,345、\12,345 等の違う表示方法を指定す,Excelマクロの基礎と応用
第32回.セルの書式(配置,Alignment)
セル内での値を表示する位置(縦位置、横位置)を指定できます、「セルの書式設定」→「配置」で指定する内容です。マクロでの指定 Range.プロパティ=設定値 指定できるプロパティは以下になります。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
第33回.セルの書式(フォント,Font)
セルで表示している文字の書体の指定方法です< セル(Rangeオブジェクト)のフォントは、Fontプロパティになります。Fontプロパティは、Fontオブシェクトを返します。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
第34回.セルの書式(塗りつぶし,Interior)
セルを目立たせる最も有効な手段は、セルを色で塗りつぶすことでしょう、セル(Rangeオブジェクト)の塗りつぶし(パターン)は、Interiorプロパティになります。Interiorプロパティは、Interiorオブシェクトを返します。Excelマクロの基礎と応用
第35回.セルの書式(罫線,Border) 第38回.セルに計算式を設定(Formula)
セルに計算式(関数)を設定する場合です。マクロでは、セルに計算式を設定することは、そんなに多くないと思いますが、使わないわけではありません。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第39回.セルのクリア(Clear)
セルをクリアするマクロの書き方です、クリアするといっても、セルの何を(値、色、コメント等々)クリアするかによって、VBAコードが違ってきます。具体的には、セルの何を(値、色、コメント等々)クリアするかによって使用いるプロパティが変わるという事です。Excelマクロの基礎と応用
第40回.セルのコピー・カット&ペーストCopy,Cut,Paste)
マクロVBAにおいて、あるセルをコピーまたはカットして、他のセルに貼り付ける場合のマクロVBAの説明になります、手作業で、セルをコピー(Ctrl+C)またはカット(Ctrl+X)して、他のセルに貼り付け(Ctrl+V後にESCまたはEnter) これと同じ動作をするマ,Excelマクロの基礎と応用
第41回.セルのコピー&値の貼り付け(PasteSpecial)
値の貼り付けと題しましたが、値だけではなく、「形式を選択して貼り付け」のいろいろな指定方法です。セルをコピーして、他のセルに「形式を選択して貼り付け」する場合のマクロVBAコードになります。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
第42回.セルをコピーするとは
セルをコピーするとは、どういう事でしょうか、セルをコピーするという事を少し掘り下げて考えることで、より実践的なVBAコードを書くことが出来るようになります。セルは、Rangeオブジェクトです、オブジェクトそのものは、コピーできません、では、何をコピーしているので,Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説

第82回.Rangeのプロパティ(Resize)
Resizeプロパティは、指定されたセル範囲(Rangeオブジェクト)のサイズを変更します、サイズが変更されたセル範囲(Rangeオブジェクト)を返します。サイズ変更は、縦方向の行数、横方向の列数の両方またはどちらか一方を指定できます。Excelマクロの基礎と応用
第83回.Rangeのプロパティ(Offset)
Offsetプロパティは、指定されたセル範囲(Rangeオブジェクト)をオフセット(移動)します、オフセット(移動)したセル範囲を表すRangeオブジェクトを返します。Offsetとは、「差し引きする」意味ですが、Offsetプロパティで取得されるのは、元のRange,Excelマクロの基礎と応用
第84回.Rangeのプロパティ(Address)
Addressプロパティは、セル範囲(Rangeオブジェクト)の参照範囲を表す文字列の値を返します。引数により、参照方法や形式を指定できます。Excelマクロの基礎と応用、エクセルVBAの入門・初級・初心者向け解説
第85回.結合セルの扱い


RangeとCellsの応用の関連記事

RangeとCellsの深遠
RangeとCells特集にします。今さら・・・と、あなどるなかれ、結構奥が深いのです。ExcelマクロVBAの問題点と解決策、エクセルVBAの技術的解説
だまされるな!RangeとCellsの使い分け!
ネットを見ていると、Range("A"&i) と言う記述を良く見かけます。初心者の方が、マクロの自動記録を見て、記録されたマクロを自分で工夫して、行数を変数にしたというのなら素晴らしい事です。ExcelマクロVBAとエクセル関数についての私的雑感
Rangeの使い方:最終行まで選択を例に
Rangeの使い方・書き方について、データ最終行まで選択する場合を例に説明します、Rangeの書き方なので、RangeオブジェクトではなくRangeプロパティの解説という事になります。最近続けざまに、以下のようなコードを見かけました。ExcelマクロVBAの問題点と解決策

Rangeのプロパティ一覧 ・・・ 詳細解説ページへのリンクあり
Rangeのメソッド一覧 ・・・ 詳細解説ページへのリンクあり



RangeやCellsの書き方次第で、マクロVBAの見た目が大きく変わってきます。
処理結果が同じであるなら、読みやすいVBAコードを書くようにしましょう。




同じテーマ「マクロVBA入門」の記事

セルに文字を入れるとは(Range,Value)
Rangeでのセルの指定方法
Range以外の指定方法(Cells,Rows,Columns)
RangeとCellsの使い方
変数とデータ型(Dim)
定数と型宣言文字(Const)
文字の結合と継続行(&アンパサンド)
四則演算と注釈
繰り返し処理(For Next)
繰り返し処理(Do Loop)
最終行の取得(End,Rows.Count)

新着記事NEW ・・・新着記事一覧を見る

「VBAによる解析シリーズその2 カッコ」をやってみた|エクセル(5月21日)
VBA+SeleniumBasicで検索順位チェッカー作成|VBA技術解説(5月18日)
テーブル操作のVBAコード(ListObject)|VBA入門(5月12日)
テーブル操作の概要(ListObject)|VBA入門(5月12日)
VBAのスクレイピングを簡単楽にしてくれるSelenium|VBA技術解説(5月6日)
Excelワークシート関数一覧(2010以降)|VBAリファレンス(4月22日)
クラスとCallByNameとポリモーフィズム(多態性)|VBA技術解説(4月6日)
VBAでのタイマー処理(SetTimer,OnTime)|VBA技術解説(4月3日)
クラスとイベントとマルチプロセス並列処理|VBA技術解説(4月2日)
エクセルの日付と時刻のまとめ|エクセル関数超技(3月6日)

アクセスランキング ・・・ ランキング一覧を見る

1.ひらがな⇔カタカナの変換|エクセル基本操作
2.最終行の取得(End,Rows.Count)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.Range以外の指定方法(Cells,Rows,Columns)|VBA入門
5.RangeとCellsの使い方|ExcelマクロVBA入門
6.変数とデータ型(Dim)|ExcelマクロVBA入門
7.マクロって何?VBAって何?|ExcelマクロVBA入門
8.繰り返し処理(For Next)|ExcelマクロVBA入門
9.とにかく書いて見よう(Sub,End Sub)|VBA入門
10.セルに文字を入れるとは(Range,Value)|VBA入門



  • >
  • >
  • >
  • RangeとCellsの使い方

    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


    記述には細心の注意をしたつもりですが、
    間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
    なお、掲載のVBAコードは自己責任で使ってください。万一データ破損等の損害が発生しても責任は負いません。






    このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。

    本文下部へ