• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:配列にすると変数が入らない)

配列にすると変数が入らない

このQ&Aのポイント
  • MS Excel2003のVBAで配列にすると、オブジェクト型配列には変数が入らない現象が起きます。
  • find関数の結果をオブジェクト型変数に代入することはできますが、配列にするとエラーが発生します。
  • 具体的なエラーメッセージは実行時エラー1004で、「アプリケーション定義またはオブジェクト定義のエラーです」と表示されます。

質問者が選んだベストアンサー

  • ベストアンサー
  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

よくあるオブジェクト省略の罠です。 Rangeプロパティの引数にCellsプロパティを使う場合,Rangeオブジェクトの 親オブジェクトがCellsオブジェクトの親オブジェクトになると錯覚しますが, 個別に記述しなければ駄目なんです。 エラーにならなかったケースは、たまたまCellsのオブジェクトがRangeと合致 したからだと思います。 一例です。 With wb.Worksheets(1)  Set result(0) = .Range(.Cells(i, num), .Cells(500, num)).Find(key) End With

royee
質問者

お礼

普段使わないのでよくわかっていませんでした。どうもありがとうございました!!

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.4

>Range(Cells(i, num), Cells(500, num)).Find(key) のCells()2つの前にWorksheets("Sheet1")。のようなシートを特定するコードを入れてみたら解決するかも。 よく経験するので。   オブジェクトを配列に入れて後どうするのか。 Findはセルの値で検索するが、普通はその行の他列の情報を見たくて、その行番号などが知りたい場合が多い。 配列になぜ貯める?

royee
質問者

お礼

別にためた配列を別ファイルに吐き出すからです!ありがとうございます。シート特定してみました。

  • utun01
  • ベストアンサー率40% (110/270)
回答No.2

そういうのは大体Variantで返ってきます。 配列であればCollectionに入れてみてはどうでしょうか? ちなみに、VBAは固定配列が非常に使いづらいので、 Collectionを使用してWrapperクラスを作って運用するとやりやすいですよ。 (個人的には、ですがw)

  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

Object配列がエラーではなく wb.Worksheets(1).Range(Cells(i, num), Cells(500, num)).Find(key) のエラーでは。 たとえば"i"に値が入ってないとか。

関連するQ&A

専門家に質問してみよう