プロが教えるわが家の防犯対策術!

お世話になります。
開いているBook1からデータを抽出し、Book2へコピーしたいのですが、AdvancedFilterでエラーが出てしまいます。
何がまずいのかよくわかりません。
お分かりになる方、ご教授願います。

Private Sub Worksheet_Activate()
Set myTbl = Workbooks("Book1.xls").Worksheets("Sheet1").Range("myTbl")
Set myQry = Workbooks("Book2.xls").Worksheets("抽出条件").Range("A_抽出条件")
Set sakiRng = Workbooks("Book2.xls").Worksheets("A").Range("A3:AR3")

myTbl.AdvancedFilter xlFilterCopy, myQry, sakiRng ←ここでエラーになります。
Dim rw As Long '入力最終行
rw = Range("I65536").End(xlUp).Row
With Application
Range("I" & rw + 1) = .Sum(Range("I1:I" & rw))
Range("AO" & rw + 1) = .SumIf(Range("AP1:AP" & rw), "済", Range("AO1:AO" & rw))
Range("AQ" & rw + 1) = .Sum(Range("AQ1:AQ" & rw))

End With


End Sub

A 回答 (5件)

>物分りが悪くて申し訳ありません。


こちらこそ、わかりづらい回答で申し訳ありません。

>インデックスが有効範囲にありません
は、ブック名や、シート名が間違っていると出ます。

#3は私の方で、使用しているデータ用のマクロですので、
#3を貼り付けずに、実際にcat_tomatoさんのデータで新規にマクロを作ってください。

1.Book2のAシート上で、「ツール」→「マクロ」→「新しいマクロの記録」
  マクロ名はそのままでよいので、OKボタンを押す。
2.「データ」→「フィルタ」→「フィルタオプションの設定」
  抽出先   :指定した範囲
  リスト範囲 :[Book1.xls]Sheet1!$A$1:$F$16 ←自分のデータ
  検索条件範囲:抽出条件!$A$1:$A$2       ←自分のデータ
  抽出範囲  :$A$3              ←自分のデータ
3.マクロ記録終了

この方法で、記録中にエラーがでる時には、データがおかしい可能性があります。

問題なく、記録できれば、#3のマクロができます。
ここまでできたら、1つづつチェックしていきます。
ここから先の方法がわからない時には、補足してください。
(ここまでの登録ができないと、データ自体を教えて頂かないとチェックのしようがありません)

要領を得ない回答で申し訳ありませんが、正常に動作するまでは、
力になりたいと思いますので、頑張ってください。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
どうやらExcelでは抽出データを作業中以外の他のブックに貼り付けることはできないらしいです。

何度も回答、ありがとうございます。
こちらのミスで付き合って頂いて、感謝しております。
また何かありましたらよろしくお願いいたします。

お礼日時:2002/12/04 13:38

先程の続きです。



#3の方法でうまくいけば、
そこから
Workbooks("Book1.xls").Sheets("Sheet1").Range("A1:F16").AdvancedFilter

Workbooks("Book1.xls").Sheets("Sheet1").Range("Mytbl").AdvancedFilter
に変更して実行
さらにうまくいけば、
Sheets("抽出条件").Range("A1:A2")

Workbooks("Book2.xls").Sheets("抽出条件").Range("A_抽出条件")
に変更して実行
というように1つづつチェックしてみてください。

具体的にどこが悪いという指摘ができなくて申し訳ありません。

この回答への補足

回答ありがとうございます。
物分りが悪くて申し訳ありません。

No.3の文を変えて貼り付けてみました。
それで実行すると「インデックスが有効範囲にありません」のエラーに変わりました。

これはどのインデックスのことを言っているのでしょう?
重ね重ねすみません。

補足日時:2002/12/04 11:28
    • good
    • 0

たびたびの見当違いの回答で申し訳ありません。


が、私の方で実行した限り正常に動いていますので、
どこかの設定ミスのように思うのですが・・・

新しいマクロの記録で、もう一度マクロを作ってみてください。
(mytbl,A_抽出条件を用いないで実際のセルで)

Sub Macro1()
  Workbooks("Book1.xls").Sheets("Sheet1").Range("A1:F16").AdvancedFilter Action _
    :=xlFilterCopy, CriteriaRange:=Sheets("抽出条件").Range("A1:A2"), CopyToRange _
    :=Range("A3"), Unique:=False
End Sub

のようなマクロができると思います。

とりあえず、そのマクロを  Private Sub Worksheet_Activate()  に移して、
正常に動くか確認してください。
(現在のマクロは名前を変えておいて、新規に作ったマクロのみ記述)

そこに行って、実際に動かしてみれないのがすごく、もどかしいです。
    • good
    • 0

>「アプリケーション定義またはオブジェクト定義エラー」


myTblやA_抽出条件の指定がおかしいとでます。(他にもありますが)

Set myTbl = Workbooks("Book1.xls").Worksheets("Sheet1").Range("myTbl")
Set myQry = Workbooks("Book2.xls").Worksheets("抽出条件").Range("A_抽出条件")
を実際のセルを入れてテストしてみてください。
Set myTbl = Workbooks("Book1.xls").Worksheets("Sheet1").Range("A1:B2")
など
それでうまくいけば、myTbl,A_抽出条件の定義(名前)がおかしいかもしれません。
まだ、うまくいかないようなら、再度補足してください。

この回答への補足

回答ありがとうございます。

おっしゃるとおり、セルを実際のものにしてみました。
が、エラーが直りません。
何度も申し訳ありませんが、よろしくお願いいたします。

補足日時:2002/12/03 11:23
    • good
    • 0

エラーは、「抽出した範囲にはフィールド名がないか、または不正なフィールド名です」でしょうか?



Set sakiRng = Workbooks("Book2.xls").Worksheets("A").Range("A3")

で試してみてください。
違うエラーでしたら、再度補足して下さい。
前回質問の方と違うのでしょうか?

この回答への補足

さっそくの回答ありがとうございます。

エラーMSGは「アプリケーション定義またはオブジェクト定義エラー」です。

教えていただいた文にしてみましたが、同じエラーが出ました。
どうぞよろしくお願いいたします。

補足日時:2002/12/03 10:48
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!