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

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

第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つの(VBAで位置を変化させる)セルを指定する場合

VBAで位置を変化させるような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の使い分け方については、
セル範囲と名前定義の場合はRangeを使う、それ以外はCellsを使う。
これが基本になります。

別の言い方をすれば、
変数を使う時はCells、Rows、Columnsを使用すると言う事です。

RangeとCellsの基本の関連記事

RangeとCellsは、VBAの基本中の基本であり、これが理解できなければVBAは何も始まりません。
これから多くのRange、Cellsに関することを説明していきますので順に学んで行ってください。

第8回.セルに文字を入れるとは(Range,Value)
前回実行したマクロを、もう少し詳しく見てみましょう。どうして、これでセルに値がはいるのか、どうやってVBAを読んだらよいのか、少しだけ詳しく解説します。とにかくこれで、A1セルに、「おはよう!」と入る事がわかりました。
第9回.Rangeでのセルの指定方法
前回までに出てきたRangeの使い方は、Range("A1") このように書きくことで1つのセルを指定する場合でした。複数のセル範囲を指定する場合、矩形のセル範囲、行全体、列全体、特殊なセル範囲 これらの指定方法を見ていきましょう。複数のセル(矩形のセル範囲) 複数のセル(矩形のセル範囲、)を指定する場合のVBAの書き方です。
第10回.Range以外の指定方法(Cells,Rows,Columns)
Rangeの指定で、あらゆるセルおよびセル範囲は指定できるのですが、マクロで使う場合は、ちょっと使いづらい場合があります。"A1"や"B5"と言うような文字で指定するのでは何かと不便です、もっと、プログラムっぽい(笑)指定方法があります。

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

第39回.セルのクリア(Clear)
セルをクリアするマクロVBAの書き方です、クリアするといっても、セルの何を(値、色、コメント等々)クリアするかによって、VBAコードが違ってきます。具体的には、セルの何を(値、色、コメント等々)クリアするかによって使用するプロパティが変わるという事です。
第40回.セルのコピー・カット&ペーストCopy,Cut,Paste)
VBAにおいて、あるセルをコピーまたはカットして、他のセルに貼り付ける場合のVBAの説明になります、手作業で、セルをコピー(Ctrl+C)またはカット(Ctrl+X)して、他のセルに貼り付け(Ctrl+V後にESCまたはEnter) これと同じ動作をするVBAになります。Copy(コピー)する場合 A1セルをB1セルにコピー貼り付けする場合 このように記…
第41回.セルのコピー&値の貼り付け(PasteSpecial)
値の貼り付けと題しましたが、値だけではなく、「形式を選択して貼り付け」のいろいろな指定方法です。セルをコピーして、他のセルに「形式を選択して貼り付け」する場合のマクロVBAコードになります。セルの値や書式を別のセルコピーすることはマクロVBAでは定番かつ必須の技術になります。
第42回.セルをコピーするとは
セルをコピーするとは、どういう事でしょうか… セルをコピーするというマクロVBAを少し掘り下げて考えることで、より実践的なマクロVBAコードを書くことが出来るようになります。コピーと一言で言っているものは、何のコピーを指しているのでしょうか。

第82回.Rangeのプロパティ(Resize)
Resizeプロパティは、指定されたセル範囲(Rangeオブジェクト)のサイズを変更します、そして、サイズが変更されたセル範囲(Rangeオブジェクト)を返します。サイズ変更は、縦方向の行数、横方向の列数の両方またはどちらか一方を指定できます。
第83回.Rangeのプロパティ(Offset)
Offsetプロパティは、指定されたセル範囲(Rangeオブジェクト)をオフセット(移動)します、オフセット(移動)したセル範囲を表すRangeオブジェクトを返します。Offsetとは、「差し引きする」意味ですが、Offsetプロパティで取得されるのは、元のRange範囲を、指定した行数・列数移動したRange範囲になります。
第84回.Rangeのプロパティ(Address)
Addressプロパティは、セル範囲(Rangeオブジェクト)の参照範囲を表す文字列の値を返します。引数により、参照方法($の付いた絶対参照)や形式(R1C1形式)を指定できます。Addressは、VBAの中で処理の一環として使う事はあまり多くないかもしれませんが、VBA作成過程ではRangeオブジェクト変数のアドレス確認に使う事もあり、
第85回.結合セルの扱い
セルが結合されていると、マクロでは時に扱いづらい事があります、セル結合されている場合に、VBAでどのように取り扱うかを解説します。そもそも、やたらにセル結合すべきではないのですが、見た目重視で作られたシートでは、セル結合が頻繁に使用されているものです。

RangeとCellsの応用の関連記事

是非読んでほしいRangeとCellsに関する説明ページ
RangeとCellsの深遠
RangeとCells特集にします。今さら…と、あなどるなかれ、結構奥が深いのです。すでに説明した内容もありますが、知っておいた方が良い事、知らなくても困らない事(笑) これらを、まとめてみました。まずは基本 A1セルに"エクセル"と入れる場合。
だまされるな!RangeとCellsの使い分け!
ネットを見ていると、Range("A"&i) と言う記述を良く見かけます。初心者の方が、マクロの自動記録を見て、記録されたマクロを自分で工夫して、行数を変数にしたというのなら素晴らしい事です。しかし、マクロについて、かなり手慣れた人や、時にはExcelマクロの指導的立場にいる人が、
Rangeの使い方:最終行まで選択を例に
Rangeの使い方・書き方について、データ最終行まで選択する場合を例に説明します、Rangeの書き方なので、RangeオブジェクトではなくRangeプロパティの解説という事になります。最近続けざまに、以下のようなコードを見かけました。Range("A2",Range("A2").End(xlDown)).Selec…
リファレンス
Rangeのプロパティ一覧 ・・・ 詳細解説ページへのリンクあり
エクセルの基本である、Rangeオブジェクトのプロパティの一覧です。太字リンク付きは、詳細解説ページ、または、応用したVBAコードがあるページにリンクしています。Excel2010までのRangeオブジェクトのプロパティ一覧 Excel2016で追加されたRangeオブジェクトのプロパティ一覧 CommentThreaded 範囲の左上隅のセルに関連付け…
Rangeのメソッド一覧 ・・・ 詳細解説ページへのリンクあり
エクセルの基本である、Rangeオブジェクトのメソッドの一覧です。太字リンク付きは、詳細解説ページ、または、応用したVBAコードがあるページにリンクしています。Excel2010までのRangeオブジェクトのメソッド一覧 Excel2013で追加されたRangeオブジェクトのメソッド一覧 FlashFill Trueは、


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




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

第8回.セルに文字を入れるとは(Range,Value)
第9回.Rangeでのセルの指定方法
第10回.Range以外の指定方法(Cells,Rows,Columns)
第11回.RangeとCellsの使い方
第12回.変数宣言のDimとデータ型
第13回.定数宣言のConstと型宣言文字
第14回.文字の結合(&アンパサンド)と継続行(_アンダーバー)
第15回.四則演算と注釈(コメント)
第16回.繰り返し処理(For Next)
第17回.繰り返し処理(Do Loop)
第18回.最終行の取得(End,Rows.Count)


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

VBAにおける変数のメモリアドレスについて|VBA技術解説(11月8日)
空文字列の扱い方と処理速度について(""とvbNullString)|VBA技術解説(1月7日)
Errオブジェクトとユーザー定義エラー|VBA入門(11月5日)
シングルクォートの削除とコピー(PrefixCharacter)|VBA技術解説(11月4日)
ユーザー定義型の制限とクラスとの使い分け|VBA技術解説(11月3日)
クリップボードに2次元配列を作成してシートに貼り付ける|VBA技術解説(11月1日)
VBAクラスを使ったイベント作成(Event,RaiseEvent,WithEvents)|VBA技術解説(10月31日)
VBAクラスのAttributeについて(既定メンバーとFor Each)|VBA技術解説(10月19日)
VBAの用語について:ステートメントとは|VBA技術解説(10月16日)
VBAのマルチステートメント(複数のステートメントを同じ行に)|VBA技術解説(10月14日)


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

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



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

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


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




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