[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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.