どうも。つじけ(tsujikenzo)です。このシリーズではVBAの「RangeオブジェクトのRangeプロパティ」がGoogle Apps Scriptの「Rangeオブジェクト」とどう違うのかについて【前編・中編・後編】で書き留めていきたいと思います。むむ?一体何のこと?
VBAのRangeオブジェクトとは
まず単語の整理をしましょう。「オブジェクト」とは直訳通り「モノ」という意味ですが、基本的にVBAで操作できるものは全て「オブジェクト」として定義されています。
- Workbook
- Worksheet
- Range
- Application
- Font
などなど。Excelを操作する為のオブジェクトは[Excelライブラリ]にまとめられていますし、VBAで操作できるのはExcelだけに限らず「時間」とか「Math(数学演算)」などもありますので、それらは別途[VBAライブラリ]の中の[VBA関数]にまとめられています。
ライブラリはVBEを開いたらF2[オブジェクトブラウザー]で確認できますので、興味がある方は是非。
ExcelライブラリのRangeオブジェクト
つまり、RangeオブジェクトはExcelライブラリに内包されているオブジェクトの一つで、セルの範囲とか、セルの操作をするんだなぁと思って頂いて大丈夫です。
クラスとは
ただ、オブジェクトには、オブジェクトの状態や属性を表す「プロパティ」と、処理(プロシージャが書かれている)を行う「メソッド」が定義されています。(世の中にはプロパティのみのオブジェクトもあるし、メソッドのみのオブジェクトもあります。C言語ではプロパティのみのオブジェクトを構造体として区別しています。)
この、オブジェクトに「プロパティ」と「メソッド」(合わせてメンバーと呼びます)が定義されている状態をクラスと呼んで、単に「モノ」であるオブジェクトと、「メンバーを操作しようよ」という目的であるオブジェクトを、区別しています。
オブジェクト≒クラス
とよく書籍に書かれているのはその為です。
Rangeクラス
なので、今回はRangeオブジェクトに定義されているメンバーを操作する話をしていきますので、Rangeクラスと呼びます。
Rangeクラスでセル範囲を操作する
(Rangeクラスが複数のセル範囲の集合・コレクションとしての特性を持っていることは後述します。)
Rangeクラスには様々なメンバー(プロパティ・メソッド)が定義されています。
つまり、あるセル範囲(Rangeオブジェクト)に対して、プロパティ(状態・特性を確認する)とメソッド(処理の命令をする)ことができるという訳です。
代表的なRangeクラスのプロパティ
CurrentRegion
FormulaR1C1
Offset
Range
Value
代表的なRangeクラスのメソッド
Active
AutoFill
Select
セルの値を取得、設定する
実際にセルに書かれている値を取得して確認したり、好きな値をセルに設定したりしてみましょう。(やっと本題に💦)
Sheet1にこのような値を用意しました。
値の取得や設定は問題ないと思います。
Debug.Print Sheet1.Range("A1").Value 'A1です
Sheet1.Range("A1").Value = “A1たい”
Debug.Print Sheet1.Range("A1").Value 'A1たい
オブジェクト変数
VBAの特徴的な記述方法である「オブジェクト変数」を使って、上記と同じ処理をしてみたいと思います。Dim宣言で型を宣言しながら、代入時にSetを宣言する必要があります。(省略不可)
Dim A1 As Range
Set A1 = Sheet1.Range("A1")
Debug.Print A1.value 'A1たい
A1.value = "A1です"
Debug.Print Sheet1.Range("A1").value 'A1です
Debug.Print A1.value 'A1です
最後の2行は同じことをしていますが、あえて並べて記述してみました。いかがでしょうか。A1.valueがRangeオブジェクトに対するValueプロパティそのものを操作していることが理解できたでしょうか。A1セルに’A1たい’が即座に書き込まれるのは、A1.valueがA1セルの値そのものだからです。果たしてGASではどうなのでしょうか?
(ちょっと何言ってるかわかんない💦)
まとめ
以上で、VBAのRangeオブジェクトのRangeプロパティとは何か?についてでしたが、あまり考察はできずに、RangeオブジェクトのValueプロパティの基礎的な書き方を確認しただけになりました💦。次は【中編】として「GASでスプレッドシートのセルの値を取得、設定するには?」をお届けします。
【補足】
Rangeプロパティがなにか?という問いについては、VBAにおけるプロパティの作成方法(モジュールレベル変数、Property Let/Setプロシージャ、Property Getプロシージャ)を学ぶ必要がありますし、Rangeプロパティがどのように実装されているのかを確認しないといけませんので、また別の機会に学ぼうと思います。
詳しくはこちらの書籍をおススメします。