[[20220625212920]] 『rng as Rangeって?』(ひめ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『rng as Rangeって?』(ひめ)

とても基本的な、そして、愚かな質問だと思われるかもしれませんが、初心者なので教えてください。

Dim rng As Range

と宣言して、そのあと、

rng.Address

というのをみかけます。

この場合のrngには、たとえばですが、A3という番地が入っているのかなとおもっていましたが、Addressをつけるということはrngには何が入っている(何を指している)のかわからなくなりました。

どなたかおしえてください。

< 使用 Excel:Office365、使用 OS:Windows10 >


>A3という番地が入っているのかなとおもっていました
https://excel-ubara.com/excelvba4/EXCEL_VBA_423.html

ちょっとつかみづらいかもしれませんが↓は「rng」というRange型(オブジェクト型)の変数を宣言しています。

 Dim rng As Range

そして、宣言した段階では空っぽ(Nothing)の状態になっています。
そのあと、たとえば↓のようにすると「rng」という変数にA3セルが格納されます。

    Sub test()
        Dim rng As Range

        Set rng = Range("A3")
        MsgBox rng.Address
        '↑と↓は同じ意味になる
        MsgBox Range("A3").Address
    End Sub

普通の変数とはちょっと違うのでイメージがつかみにくいとは思いますが、オブジェクト変数にはオブジェクトそのものが格納されているということになります。

(もこな2) 2022/06/25(土) 22:11


 あー、そうですよねえ。疑問ですよね。
 Rangeなど、オブジェクトというものの仕組みを理解する必要があります。

 (0)
 まあ、ここで説明を聞いても余りピント来ないと思います。
 使っていくうちに、ああ、なるほどそういうものか、と思う(諦める?違うな)時が来ますので、
 それまで、もう少しつきあってやってください。

 (1)
 普通の変数は、
 ・数値とか、
 ・文字列だとか、何が入っているか明確ですよね。

 これに対して、Rangeオブジェクトは、
 何が入っているか一言では言えないんですね。
 質問の仕方で、返って来るものがそれぞれ違うという、そういう奴なんですよ。

 ・rng.Value   とすると、そのセルに入っている値が返ってきますし、
 ・rng.Address とすると、そのセルのアドレスが返ってきます。
 ・rng.Formula とすると、そのセルに入っている式が返ってきます。

 こういうのをオブジェクトの「プロパティ」といって、そのオブジェクトの属性や性質を表します。
 種類が色々あって、どのプロパティを使うかによって、返ってくるものが違ってきます。
 どんなプロパティがあるか、Rangeオブジェクトのヘルプを見てください。

 (2)
 もうひとつ、Rangeオブジェクトには、なにかの動作をさせる「操作命令」もあります。
 例えば、
 ・rng.Copy          とすると、そのセルをコピーします。
 ・rng.ClearContents とすると、そのセルに入っている数式や値を消去します。
 こういうのを、オブジェクトのメソッドと呼びます。

 (3)
 このように、オブジェクトには、プロパティ(その属性)や、メソッド(操作)が備わっています。
 ですから、何が入っているか、というと、
 そうしたプロパティやメソッドが詰まっていて、
 それを適宜選んで利用する、ということになります。

 やっぱり分かりにくいね。で、(0)に戻ります。
(γ) 2022/06/25(土) 22:40

解りにくいですかね?

> Dim rng As Range
> Set rng = Range("A3")

これで単純に、rng という変数に Range("A3") セットされる。そのままなんですが。
rng に Range("A3") がセットされているから、A3セルそのもの

rng.select
とやれば、A3セルが選択されるし、

msgbox rng.value
とやれば、A3セルの値が表示されるし。

英文そのままなので解りやすいと思いますけど。

Dim rng As Range
Set rng = Range("A3:B10")
rng.select

とか試してみれば。

(難しいですか?) 2022/06/25(土) 23:21


もこな2さん、γさん、難しいですか?さん

素人のアホな質問に丁寧に回答くださって本当にありがとうございました。でも勇気をだして質問をしてよかったです。

これから精進します。

ありがとうございました。
(ひめ) 2022/06/26(日) 08:37


今さらですが、Rangeオブジェクトにセットされた変数には、セルだけでなく
ブック名やシート名も含まれています。

例えば

Dim rng As Range
Set rng = Range("A3:B10")
rng.Select
MsgBox rng.Address(External:=True)

色々研究してください。

Dim rng As Range
Sheets("Sheet1").Select
Set rng = Range("B2")
ActiveSheet.Range("B2").Value = "www"
Sheets("Sheet3").Select
Range("B2").Value = "ppp"
MsgBox rng.Value

(難しいですか?) 2022/06/30(木) 05:36


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.