- ベストアンサー
配列にすると変数が入らない
- MS Excel2003のVBAで配列にすると、オブジェクト型配列には変数が入らない現象が起きます。
- find関数の結果をオブジェクト型変数に代入することはできますが、配列にするとエラーが発生します。
- 具体的なエラーメッセージは実行時エラー1004で、「アプリケーション定義またはオブジェクト定義のエラーです」と表示されます。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
よくあるオブジェクト省略の罠です。 Rangeプロパティの引数にCellsプロパティを使う場合,Rangeオブジェクトの 親オブジェクトがCellsオブジェクトの親オブジェクトになると錯覚しますが, 個別に記述しなければ駄目なんです。 エラーにならなかったケースは、たまたまCellsのオブジェクトがRangeと合致 したからだと思います。 一例です。 With wb.Worksheets(1) Set result(0) = .Range(.Cells(i, num), .Cells(500, num)).Find(key) End With
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
>Range(Cells(i, num), Cells(500, num)).Find(key) のCells()2つの前にWorksheets("Sheet1")。のようなシートを特定するコードを入れてみたら解決するかも。 よく経験するので。 オブジェクトを配列に入れて後どうするのか。 Findはセルの値で検索するが、普通はその行の他列の情報を見たくて、その行番号などが知りたい場合が多い。 配列になぜ貯める?
お礼
別にためた配列を別ファイルに吐き出すからです!ありがとうございます。シート特定してみました。
- utun01
- ベストアンサー率40% (110/270)
そういうのは大体Variantで返ってきます。 配列であればCollectionに入れてみてはどうでしょうか? ちなみに、VBAは固定配列が非常に使いづらいので、 Collectionを使用してWrapperクラスを作って運用するとやりやすいですよ。 (個人的には、ですがw)
- o_chi_chi
- ベストアンサー率45% (131/287)
Object配列がエラーではなく wb.Worksheets(1).Range(Cells(i, num), Cells(500, num)).Find(key) のエラーでは。 たとえば"i"に値が入ってないとか。
お礼
普段使わないのでよくわかっていませんでした。どうもありがとうございました!!