[[20081218170832]] 『別シートのセル範囲を行・列の数値で指定したい』(トロール) ページの最後に飛ぶ

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

 

『別シートのセル範囲を行・列の数値で指定したい』(トロール)

 VBAでセル範囲を指定するとき、Range(Cells(1, 1), Cells(3, 3)) のように
 できますが、

 Worksheets("Sheet2").Range(Cells(1, 1), Cells(3, 3)).Select

 とするとエラーになります。
 アクティブでないシートのセル範囲の指定はどうすればいいのでしょうか。

 やりたいことは、別シートのある範囲にデータが入力されているかどうかによって
 処理を分けたいので、

 If WorksheetFunction.CountA(Worksheets("Sheet2").Range(Cells(1, 1), Cells(3, 3))) > 1 

 のようなコードを考えています。このとき、CountA() の引数の指定のしかたで
 止まってしまって先に進めません。

  WorksheetFunction.CountA でなく、VBAの関数で同じことができれば、それも
 知りたいです。
 

 Worksheets("Sheet2").Range(Cells(1, 1), Cells(3, 3))
このように書くと、Cells(1, 1)やCells(3, 3)はアクティブなシート
(またはこのコードがシートモジュールにかかれたものならば、コード
が記録されたシート)のRangeオブジェクトを取得しようとします。
「アクティブでないシートのセル範囲の指定」をしようとしているのに
Rangeプロパティの引数で「アクティブなシートのセル」が使用されるので、
エラーとなります。
 
Worksheets("Sheet2").Range(Worksheets("Sheet2").Cells(1, 1), Worksheets("Sheet2").Cells(3, 3))
と書けば動くはずですが、冗長。
With 〜End Withステートメントで多少すっきりにはできます。
または、オブジェクト変数を使って、
 
Set C1 = Worksheets("Sheet2").Cells(1, 1)
Set C2 = Worksheets("Sheet2").Cells(3, 3)
If WorksheetFunction.CountA(Worksheets("Sheet2").Range(C1 , C2)) > 1
 
とか。
(みやほりん)(-_∂)b

 みやほりん さん、ありがとうございます。

 何とかうまくいけそうです。

 ただ、いろいろ実験しているのですが、Selectメソッドがうまくいきません。 

 Sub test()
    Dim C1, C2
    Set C1 = Worksheets("Sheet2").Cells(1, 1)
    Set C2 = Worksheets("Sheet2").Cells(3, 3)
    Worksheets("Sheet2").Range(C1, C2).Select
 End Sub

 というコードを標準モジュールに置いて、Sheet1 がアクティブな状態で実行すると

 "RangeクラスのSelectメソッドが失敗しました"

 というエラーになりました。
 Sheet2 をアクティブにして実行すると、問題なく動きます。

 Sub test2()
    Dim C1, C2
    Set C1 = Worksheets("Sheet2").Cells(1, 1)
    Set C2 = Worksheets("Sheet2").Cells(3, 3)
    MsgBox Worksheets("Sheet2").Range(C1, C2).Count
 End Sub

 でやってみると、Sheet1 がアクティブなときでもうまくいきます。

 当面の問題は先には進めそうですが、基本のキである Rangeオブジェクトを
 使いこなすのは難しいです。

 (トロール)

 selectしたい理由はなんでしょう?
 selectするのだからSheet2をactiveするのは必要に思います。
(bbq)

 bbq さん、ありがとうございます。

 >selectしたい理由はなんでしょう?

 特に必要性があったのではなく、Cellsプロパティを理解できているかどうかをいろいろ
 実験していたのです。

 >selectするのだからSheet2をactiveするのは必要に思います。

 といわれれば、そうなんだな、と思いました。

 (トロール)

コメント返信:

[ 一覧(最新更新順) ]


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