|
▼T-K さん
こんにちは^^
>【1】
>セルの「A4」と「E4:E7」の範囲の空白セルを赤く塗りつぶしたいんですよね?
>とありますが、実は、E4は単一セルで、E5:E7は「セルを結合した状態」です。
>下記で試したのですが、E5:E7は色がついてしまいました。
あー結合なんかあ・・・
「結合」とマクロは相性が悪いので、なるべく結合しない方がいいらしいのですが、そうも言ってられないこともありますよね。
ちうことで、結合してる場合、左上のセルに値が入ってる形になるので
(ってことでいいんだろうか・・・・)
「E5:E7」で空白セルを見ていくと、E6,E7でヒットしてしまうので、色がついてしまいます。左上のセルだけ指定してやればいいと思います。
>End Ifの後に、Set r = Nothingを記述するのは何故でしょうか。
ht tp://www.moug.net/tech/exvba/0150027.htm
このへん読んでもらったらわかるかな?
>これでも同じ結果が得られると言えるでしょうか。
>Sub test3()
>
> Dim r As Range
>
> Set r = Worksheets("Sheet1").Range("a4,d4,d5:d7,e5:e7").SpecialCells(xlCellTypeBlanks)
>
> Do
> r.Interior.ColorIndex = 3
> Loop While r Is Nothing
> Set r = Nothing
> MsgBox "赤セルを入力してちょ"
> Cells.Interior.ColorIndex = 0
>
>End Sub
えーっと、一応色はついたりしますが、なんでLoopしてるのかわかりません^^;
Set r = Worksheets・・・・
の下に、「r.Select」でもしてもらったらわかるけど、変数「r」に、処理対象のセル範囲が全部入ってます。
それで、一気に処理出来るので、Loopする必要はないかと・・・
(う・・・説明が難しい)
で、メッセージの直後に
Cells.Interior.ColorIndex = 0
が、入ってますが、すぐ色が消えてしまうけど、それはかまへんの?
あと、これ入れるなら、
r.Interior.ColorIndex = 0
で、OKです。
Cellsにすると、もし対象セル以外に、何か色づけされてたら、それも解除されちゃいます。
あ、あと、
Range("a4,d4,d5:d7,e5:e7")
のところで、D4とD5:D7って、連続してるセルだけど、分けてるのはなんで?
|
|