拙著『いちばんやさしいExcel VBAの教本』の、p.244のワンポイントに、
このChapterでは「Cells、Rows、Columnsプロパティの引数」といった解説を行ってきましたが、この解説は厳密には正しくありません。本当は、Cells、Rows、Columnsプロパティが、引数を指定できないプロパティだからです。
と書きました。
本当は引数を指定できないのに、引数を指定しているかのように見えるCells・Rows・Columnsプロパティを使った、オブジェクトを取得・操作するコード(オブジェクト式)が、本来どのようなコードなのかを、補足しておきます。
但し、あくまでも、Rangeオブジェクトを取得するコードを、深く知っておきたいという方に向けてご紹介するのであって、「_Defalut」を省略せずに書くことを勧めるものでは、決してありません。
このあとご紹介する省略しない書き方をご存知の方は、かなり少なく「_Defalut」が書かれていると、コードを読み辛く感じるExcel VBA経験者のほうが圧倒的に多いはずです。
Rangeオブジェクトの既定プロパティをあえて書いてみる
Cellsプロパティ・Rowsプロパティ・Columnsプロパティで取得したRangeオブジェクトの、既定プロパティ「_Default」をあえて書くと以下のとおりです。
Cellsの場合
拙著で何度も登場する、A1セルを選択する、
Cells(1, "A").Select
といったコードは、以下のコードの省略形です。
Cells.[_Default](1, "A").Select
Rowsの場合
拙著のLesson 63「行全体・列全体を表すRangeオブジェクトについて学習しましょう」で解説している、1:5行目を選択する、
Rows("1:5").Select
というコードは、以下のコードの省略形です。
Rows.[_Default]("1:5").Select
Columnsの場合
Lesson 63「行全体・列全体を表すRangeオブジェクトについて学習しましょう」に登場する、A:C列を選択する、
Columns("A:C").Select
というコードは、以下のコードの省略形です。
Columns.[_Default]("A:C").Select
_Defaultはコード入力時にヒント表示されている
実はRangeオブジェクトの既定プロパティ「_Default」は、コードを入力するときに、しっかりとヒントとして表示されています。
Cellsプロパティを入力しようとした場合は下図のように、
Rowsプロパティを入力しようとした場合も下図のように、
Columnsプロパティを入力しようとした場合も下図のように、
それぞれ表示されています。
そして、_Default([RowIndex], [ColumnIndex]) の後ろに「As 〇〇」といった表示がないので、Rangeオブジェクトの_Defaultは戻りはVariantです。
先にも書いたとおり、実務で利用するSubプロシージャに「_Default」を書くことは、まったくお勧めしませんが、オブジェクトを取得・操作するコードについて理解できてきて、Rangeオブジェクトについて、より深く知りたいと思ったときに、この記事を思い出してください。
- Newer:名前からRangeオブジェクトを取得-Name.RefersToRange
- Older:Sort.Applyとは
Home » いちばんやさしいExcel VBAの教本 » 引数を指定できないCells・Rows・Columnsプロパティを使った本当のコード