[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『別シートのセル範囲を行・列の数値で指定したい』(トロール)
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.