ではRangeについてもう少し掘り下げていきましょう。
オブジェクトの話しないって言ったくせにRangeオブジェクトって書いてますね。
Rangeはオブジェクトです。前回コードを書いたので少しだけ理屈を話していきます。
Rangeオブジェクトはセルを指しています。
前回の記事にもありますようにRange("A1")っていうのはセルA1のことです。
前回文字列を書く時はダブルクォーテーションで挟むと伝えましたね。ってことは("A1")も A1 は文字列ですよね。だから何だ?っていう話なんですけどイメージとしてはこのセルに対する仕事が明確に決まっている時に使う書き方だと思ってください。
セルの値=絶対値 みたいなイメージです。
必ずこのセルに結果を出すとき とか 見に行くセルの番地が決まっている時 等ですね。
範囲指定するときも上記の書き方を応用して範囲指定します。
セルA1からセルE5までを指定したいときは以下のようにコードを書きます。
Range("A1:E5")
こんな感じです。
ここからはオブジェクトの話を混ぜながら話します。
「Range("A1:E5").value = "おはようございます"」って書いて実行すると指定範囲全体におはようございますが並びます。
ん?なんか付いてきましたね。 .value って何?って思いませんか?
これはRangeオブジェクトのValueプロパティ(属性)です。
「RangeオブジェクトのValueプロパティ におはようございますを代入してください」という意味になります。
「Value」は省略出来るので書いてなかっただけです。
(言わなくてすいません。まだ省略してるとこあります。今はスルーで。)
ただ書かないといけないプロパティも居ます。
例えば Range("A1:E5").Interior.CororIndex = 3 といった感じです。
これを Range("A1:E5") = 3 と書くと指定範囲に3が並ぶだけになってしまいます。
細かく読みますと RangeオブジェクトのInteriorプロパティを使ってInteriorオブジェクトを取得しInteriorオブジェクトのColorindexプロパティに3を代入して。となります。
意味としては「セルA1~E5のセルの背景NoにインデックスNo.3(赤)を代入して」となります。
全部こうではないのですがイメージとしてはオブジェクトに紐付いたプロパティを使って次のオブジェクトを関連付けているということになります。今はこのぐらいでやめましょう。
触れないといけない話題なのですが最初から理屈っぽく考えると上記のようになってしまうので次行きます。
他にも範囲の書き方はこんなものがあります。
Range("A1") 'セルA1
Range("A1:A5") 'セルA1~A5
ここまでは上記に似たのが居ますよね。
Range("A1","A5") 'セルA1~A5
Range("A:C") 'A列からC列
Range("1:5") '1行目から5行目
ここまではなんとなくイメージできると思います。
ではセルに対してコードを作成するのにどのセルに対して仕事をするのか決まってない時ってあるの?って考えてみましょう。
・・・
・・・
・・・
結構ありますよね。
・最終行が毎回分からないデータを使って仕事をしているとき
・行全体に空欄があるデータにフィルタを設定すると空欄が居る列から下はフィルタにかからないとき(飛び地を考慮して最後までフィルタの範囲にしないといけません)
などなど・・・。結構あると思います。
これはそもそも空白行なんてつくったり最終行が分からないデータの方が悪いんですけど仕方ない時ってありますよね。(文句言えないとき・・・)
そんなときは仕事をする範囲が決まらないからセルを指定することが出来ません。
どうしましょ?次いきますか。。。