[[20150514201009]] 『2度出るセル範囲を1回にしたい』(三輪車) ページの最後に飛ぶ

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

 

『2度出るセル範囲を1回にしたい』(三輪車)

11個あるセルのうち、1個でも空白があったら斜線を引くという
意味の下記コードはうまく機能しております。

ただ、セル範囲を表記する Range("F4:F11,I6:I7,I11")が2度
出て、くどいような気がします。

 If WorksheetFunction.CountA(Range("F4:F11,I6:I7,I11")) _
    < 11 Then

    Range("F4:F11,I6:I7,I11").SpecialCells(xlCellTypeBlanks) _
   .Borders(xlDiagonalDown).LineStyle = xlContinuous
 End If

省略して1度だけで済む書き方はあるのでしょうか?
ここでは先頭にWithステートメントは使えないように思えます。
幼稚園レベルの質問ですが、よろしくお願いします。

< 使用 Excel:Excel2007、使用 OS:Windows8 >


 Withで括った場合、自分自身を表すのはどうすんの? ってことですね。

 一般論的には悩ましいです(私のレベルではですが・・・)、

 Rangeオブジェクトに限ると、Cellsプロパティがあります。

 試してみると結果はOKでした。・・・けど、もっと「納得!」と思える回答がつくといいですね。

 私も知りたいです。

(半平太) 2015/05/14(木) 22:10


変数を使ってください。↓をお勧めします。
 Sub test2()
    Dim r As Range

    Set r = Range("F4:F11,I6:I7,I11")

    If WorksheetFunction.CountA(r) _
       < 11 Then
        r.SpecialCells(xlCellTypeBlanks) _
                .Borders(xlDiagonalDown).LineStyle = xlContinuous
    End If
 End Sub

 どうしても Withというなら。
 Sub test3()
    With Range("F4:F11,I6:I7,I11")
        If WorksheetFunction.CountA(.Cells) _
           < 11 Then
            .SpecialCells(xlCellTypeBlanks) _
                    .Borders(xlDiagonalDown).LineStyle = xlContinuous
        End If
    End With
 End Sub

 # 重なったけど、書いちゃったので。
 # .Cells以外はないのではないでしょうか。 

 # 書き込んだ積もりが、更新の衝突が起きて、書き込まれていなかった。今度こそ。

(γ) 2015/05/14(木) 22:26


半平太様、  γ様   ありがとうございます、助かりました。

Cellsプロパティとのコンビで With が使えるのですか、大変勉強になりました。

さらに、オブジェクト変数を使う手があったのですね。どちらもスッキリわかりやすく、

両方使いたくなってしまいました。

実を申しますと、別のセル範囲2か所と合わせ斜線を引くコードが3つ続くため、

オウム返しでセル範囲を6回も記述するのは芸がないと思っていたところです。

(三輪車) 2015/05/15(金) 04:18


 > Withで括った場合、自分自身を表すのはどうすんの? ってことですね。
 > Rangeオブジェクトに限ると、Cellsプロパティがあります。
   ↑
 間違いでした。(恐れていた通り・・)

 Rangeオブジェクトと云っても、ColumnsとかRowsとかもありますから、
 Cellsプロパティが自分自身と同じになるとは限りません。

 オブジェクト変数を使う方が不安ないです。

(半平太) 2015/05/15(金) 07:47


半平太様  

ご丁寧にありがとうございます。

γ様の勧めてくださった、オブジェクト変数一本に絞ります。

Dim r As Range

    Set r = Range("F4:F11,I6:I7,I11")

(三輪車) 2015/05/15(金) 08:44


コメント返信:

[ 一覧(最新更新順) ]


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