プロが教えるわが家の防犯対策術!

Sub sample2()
Dim rng8 As Range
Set rng8 = Range("B2:E4")
rng8(3).Interior.ColorIndex = 5
With rng8
.(3).Interior.ColorIndex = 5
End With
End Sub

上記で 
rng8(3).Interior.ColorIndex = 5
は問題無く機能しますが、

withステートメントの
.(3).Interior.ColorIndex = 5
は修飾子なんたらのエラーになります。

どのように書けば宜しいのでしょうか。

勿論、
With rng8(3)
.Interior.ColorIndex = 5
End With
とやれば出来るのですが、
(3)の部分を色々変更したいのです。

宜しくお願いします。

A 回答 (3件)

With mg8(i)などとなればいいだけでは。

    • good
    • 0
この回答へのお礼

折角回答を頂きましたが、
分かりません。
有り難うございました。

お礼日時:2019/04/21 17:56

B2:E4 は、12セルあるわけで、その「3番目」なんて、どこのセルなんて分かりますか?



With rng8
   .Item(3).Interior.ColorIndex = 5
End With

このようには書けますが、ふつうは、一行や一列で行うので、複数行・複数列の場合は、あえて書く場合は、Cells プロパティを使います。
1行目の3列目という意味で、このように書きます。

   .Cells(1, 3).Interior.ColorIndex = 5
    • good
    • 0
この回答へのお礼

早速有り難うございました。
回避方法が分かったので直接の解決にはなりましたが、
(質問の仕方が悪かったのですが)
聞きたかったことは、
なぜ、 .(3).interior.coloerindex = 5
がコーディング上のエラーになるのかということです。
コレについて教えていただけると助かります。
宜しくお願いします。

お礼日時:2019/04/21 17:55

>なぜ、 .(3).interior.coloerindex = 5


>がコーディング上のエラーになるのかということです。

端的にいうなら、配下のプロパティがないから、ということでしょうけれども、正直な話ですが、インテリセンスによって導かれるだけなのです。(インテリセンスというのは、VBA Editor 上で、オブジェクトの後にプロパティやメソッドの一覧が出てくる入力補助機能のこと)

With Rng8
.(この後に、何が続くのかインテリセンスで探してみる)

と[. ピリオド]を入れたあと、もしくは.(3)と入れた後に、その配下に何らかのプロパティが続いてくれるなら書けるけれども、そうならないので、駄目なのだなっていうことが分かるのです。理屈とか理由とかではなく、VBAの癖のようなものだと理解しています。

それでは、
Rng8(3).Interior.ColorIndex =5 と書けるのだから、

With Rng8
(3).Interior......

はどうかということでしょうけれど、上位オブジェクトのつながりを持たないで書いたところで、いきなり(3)では、上位オブジェクトをつないでないので、これは駄目だなって分かります。もともと、Rng8(3)は、Rng8.Item(3).Interior..... のItemが省略されているわけなのですから、それを戻してあげればよいということです。VBAにはいくつか省略型の書き方がありますが、それをまったく知らないで書いている人もいるようです。例えば、Range("A1") で、.Valueプロパティを書かないで書いてしまうとか。

実際、私は、書く時は、習慣的なものでしかありません。
    • good
    • 0
この回答へのお礼

再度、有り難うございました。
まず、私の質問の意図を完璧に理解いただき嬉しく思いました。
次ぎに、ご説明頂いた内容が良く理解出来ました。
本件では、Rng8.Item(3).Interior.....がオーソドックスな形だったのですね。
ご指摘のとおり、私は何も知らずに見よう見まねで書いています。
ただ、「Range("A1") で、.Value」については昔はそうでしたが、今はvalueは必ず入れています。
本回答を頂いたことでスッカリもやもやが晴れました。
かつ勉強になりました。
長々とお手間を掛けさせましたが深謝です。
お世話になりました。

お礼日時:2019/04/22 06:27

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!