重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

EXCEL2003を使用しています。
先日質問をした結果、見事なご回答をいただき、テスト検証では正常に動作したのですが、いざ自分が扱っているデータに置き換えた所、エラーになりましたので、マクロの読解をお願いいたします。
【先日の質問】
http://oshiete1.goo.ne.jp/qa3414824.html
【読解して欲しいマクロ】
ANo.1の方が記載されているマクロです。
【エラーの内容】
次のコードが黄色くなっています。
Range(Range("c7"), lstPJ).AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range(Range("h7"), lstList), Unique:=False
*この内容については、実際のデータを提示しないと、何処に何があるのか皆様には解らないと思いますが、念の為、記載しました。

お手数をおかけいたしますが、よろしくお願いいたします。

A 回答 (3件)

Wendy02様 ご指摘ありがとうございます


絞り込みの条件がH7セルから書かれているなら

For idx = 7 To 100

にしないと、1行目~6行目の空白を拾いますね。
ここも確認してください
    • good
    • 0
この回答へのお礼

zap35さん、お礼が大変遅くなり申し訳ありませんでした。
初心者のため、わからないながら実行しましたが、まだできませんので、もう少し勉強したいと思います。
何度もご回答をいただき、本当に感謝いたします。
また、不適切な記述がありましたことを、お詫び申し上げます。
これに懲りず、またご回答頂ければ幸いです。
今回は本当にどうもありがとうございました。

お礼日時:2007/10/27 19:23

nene99 さん、zap35 さん、こんばんは。


割り込み失礼します。

最後まで、コードが来ているので、エラーは、シートから返されるものですから、実行時エラーの'1004 ですね。

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

あたりではないかと思います。 For idx = 1 To 100 で空白値を探していますから。ご質問者さんは、ここの範囲だからと言って、書き直ししてもらったほうが早いですね。でも、「読解」というのは、作者のzap35さんには失礼になってしまいます。

ただ、私の提案は、フィルタオプションのマクロを作るのなら、あまり難しく考えないほうがよいと思います。これって、難しく考えれば考えるほど、難しくなってしまいます。

挿入-名前-定義、DataBase と Criteria (こちらは予約語です)をつけて登録すればよいです。
(予約語というのは、フィルタオプションをやっていれば、すでに設定されています。)

その後、記録マクロを作って、Rangeの範囲を、DataBase, Criteria に書き換えてあげれば、出来上がります。(厳密に言うと、ベストなマクロではありません。別のフィルタオプションなどを設けると、予約語が、別の場所に移ってしまうので、もし、そういう心配があるなら、その場所は、名前を DataBase1, Criteria1 などして、Rangeの中も、Range("DataBase1"), Range("Criteria1") などとしてあげると、トラブルはなくなります)

もしも、データの部分や検索条件が変われば、名前-定義で、書き直せばよいはずです。

Sub KirokuMacro()
 If ActiveSheet.FilterMode Then
   ActiveSheet.ShowAllData
 End If
 Range("DataBase").AdvancedFilter _
 Action:=xlFilterInPlace, _
 CriteriaRange:=Range("Criteria"), _
 Unique:=False
End Sub
    • good
    • 0
この回答へのお礼

Wendy02さん、お礼が大変遅くなり申し訳ありませんでした。
また、質問の記述にもご指摘いただき、ありがとうございました。
次回より、言葉を選らんで質問したいと思います。
ご回答いただき、どうもありがとうございました。

お礼日時:2007/10/27 19:26

エラーコードは何ですか? この1行だけを掲載されても回答がしづらいですね。


また読解とはどのような意味でしょうか? 解説して欲しいという意味ですか? それならばマクロ記録で「データ」→「フィルタ」→「フィルタオプションの設定」で条件指定してみればわかりますよ。それを記述したようなものです。 

エラーになる理由を想像を補って書きますが lstPJ はフィルタをかけるデータ範囲の最終セルです。C列が対象なら
 Set lstPJ = Sheets(sht).Range("C65536").End(xlUp)
にしましたか? (前問ではA列で回答しました)

同様に絞り込みする値を格納している列はH列なら
Const col As String = "H"
に変更していますか?

lstPJ、lstListをSetしている箇所で
 Msgbox lstPJ.Address
 Msgbox lstList.Address
をそれぞれ挿入してみたら、正しい最終セルを取得できているかがわかると思います
    • good
    • 0

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