第56回.Rangeオブジェクト(RangeとCells)
エクセルの根幹はセルです、セルはRangeオブジェクトになります、
このRangeオブジェクトの理解なくしてマクロVBAは理解できません。
マクロVBAで自在にセルを扱う為には、このRangeオブジェクトをしっかりと理解する必要があります。
Range、Cells、Rows、Columns・・・
どれも単一または複数セル表すRangeオブジェクトになります。
目次
Rangeオブジェクトを参照するためのプロパティ
言い方を変えれば、
Rangeオブジェクトを返すプロパティを経由してRangeオブジェクトを参照するという事です。
下表は、Rangeオブジェクトを参照するためのプロパティです。
オブジェクト | プロパティ | 説明 |
Worksheet | Range | セルまたはセル範囲を表す |
Cells | セルを表す | |
Rows | 行を表す | |
Columns | 列を表す | |
Range | Range | セルまたはセル範囲を表す |
Cells | セルを表す | |
Rows | 行を表す | |
Columns | 列を表す | |
EntireRow | セル範囲を含む 1 行または複数の行全体 | |
EntireColumn | セル範囲を含む 1 列または複数の列全体 | |
Offset | オフセットの範囲 | |
Resize | サイズを変更 | |
End | 領域の終端のセル。Ctrl+方向キーに相当 | |
SpecialCells | 指定された条件を満たしているすべてのセル | |
MergeArea | 結合セル範囲を表す | |
Next | 次のセルを表す |
Rangeオブジェクトに、Rangeプロパティがあるあたりが、
少し理解しづらいかもしれません。
まずは、上表の太字が使えるようになること目指してください。
Rangeオブジェクトを返すRangeプロパティ
これは、WorksheetのRangeプロパティであり、このRangeプロパティを通して、Rangeオブジェクトを参照しています。
Rangeプロパティを介してRangeオブジェクトを参照しているのだと、まずはそのままに理解してください。
詳しくは、RangeとCellsの深遠
また、Offset、Resize等、まだ説明していないプロパティについては、このマクロVBA入門シリーズで今後少しづつ説明していきます。
Rangeオブジェクトのデータ型
つまり、
Dim MyRange As Range
Set MyRange = Worksheets(1).Range("B2:D10")
MyRange.Value =
"文字列"
これは、
Worksheets(1).Range("B2:D10").Value = "文字列"
これと同じことになります。
全てのセルを表すCells
シートの全セル
WorksheetオブジェクトのCellsは、シートの全セルを参照することになります。
複数セルを含むRangeオブジェクトの全セル
Rangeオブジェクトの使用例
Dim MyRange As Range
Set MyRange = Worksheets(1).Range("B2:D10")
MyRange.Cells(3, 2) = "C4セル"
これは、C4セルに文字が入ることになります。
RangeオブジェクトであるMyRangeの先頭セルはB2セルです。
Cells(...)は、Rangeオブジェクト内の行列の位置を引数に指定します。
MyRange.Cells(3, 2) はB2セルから3行目の2列目
つまりB2セルの2つ下1つ右のC4セルになります。
RangeオブジェクトのCells(...)とItem(...)
当面はtemプロパティというものがあるという事だけ知っていれば十分です。
これは、
MyRange.Item(3, 2)
このようにItemプロパティを使っても同じ指定になります。
さらに、
MyRange.Item(8)
このようにItemに引数を1つだけ指定する書き方もあります。
2つ指定した場合は行列の指定。
1つだけ指定した場合はセルの順番(列→行)の位置のセルになります。
(上記の(8)は、3列が2行で6、次の2番目のセルなので、6+2=8番目のセル)
RangeとCellsの使い分け方
複数セル範囲と名前定義の場合はRangeを使う、それ以外はCellsを使う。
これが基本になります。
変数を使う時はCells、Rows、Columnsを使用すると言う事です。
これについては第11回.RangeとCellsの使い方こちらで解説しています。
VBEの自動メンバ表示(インテリセンス)
この自動メンバ表示の事をインテリセンスと呼びます。
range("A1").
と、「.」を打った時点で、メンバが自動表示されます。
Cells(1, 1)
これでは表示されません。
cells.
このように、引数の()を省略するか、
cells().
と、引数を空っぽにするとメンバが自動表示されるようになります。
なぜこのような挙動の違いがあるかを気にする方がたまいますが、
そのようなことを気にするより、まずはしっかり使えるようになることを優先してください。
Cellsだけで引数を指定しない時と、引数を指定した時では、
参照しているプロパティが別物になります。
引数を指定する単一セルを参照するプロパティは、戻り値がVariantになります。
RowsとColumns
Columnsで取得されるRangeオブジェクトは列の集まりになります。
これらは、単一セルの集まりではなく、行全体や列全体の集まりになります。
Rows(n) → Rows.Item(n)
Columns(n) → Columns.Item(n)
Rangeオブジェクトのプロパティとメソッド
先の表では、Rangeオブジェクトを返すプロパティのみ記載したわけですが、
全プロパティとメソッドについては、以下を参照して下さい。
一度くらいは、どんなプロパティがあるかだけでも、ざっと目を通しておくと良いでしょう。
最低限必要なプロパティ・メソッドは、このマクロVBA入門で一度は説明します。
Rangeオブジェクトは難しい
RangeとCellsの関連記事
同じテーマ「マクロVBA入門」の記事
第53回.Workbookオブジェクト
第54回.Windowsオブジェクト
第55回.Worksheetオブジェクト
第56回.Rangeオブジェクト(RangeとCells)
第57回.Applicationのプロパティ(マクロ高速化と警告停止等)
第58回.コレクションとは(Collection)
第59回.コレクション処理(For Each)
第60回.エラー処理(On Error)
第61回.「On Error GoTo」と「Exit Sub」
第62回.「On Error Resume Next」とErrオブジェクト
第63回.ブックを開く(Open,Add)
新着記事NEW ・・・新着記事一覧を見る
TRIMRANGE関数(セル範囲をトリム:端の空白セルを除外)|エクセル入門(2024-08-30)
正規表現関数(REGEXTEST,REGEXREPLACE,REGEXEXTRACT)|エクセル入門(2024-07-02)
エクセルが起動しない、Excelが立ち上がらない|エクセル雑感(2024-04-11)
ブール型(Boolean)のis変数・フラグについて|VBA技術解説(2024-04-05)
テキストの内容によって図形を削除する|VBA技術解説(2024-04-02)
ExcelマクロVBA入門目次|エクセルの神髄(2024-03-20)
VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
アクセスランキング ・・・ ランキング一覧を見る
1.最終行の取得(End,Rows.Count)|VBA入門
2.繰り返し処理(For Next)|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.変数宣言のDimとデータ型|VBA入門
5.RangeとCellsの使い方|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.セルのクリア(Clear,ClearContents)|VBA入門
8.メッセージボックス(MsgBox関数)|VBA入門
9.条件分岐(Select Case)|VBA入門
10.ブック・シートの選択(Select,Activate)|VBA入門
このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。