- ベストアンサー
エクセルのマクロ読解について
EXCEL2003を使用しています。 先日質問をした結果、見事なご回答をいただき、テスト検証では正常に動作したのですが、いざ自分が扱っているデータに置き換えた所、エラーになりましたので、マクロの読解をお願いいたします。 【先日の質問】 http://oshiete1.goo.ne.jp/qa3414824.html 【読解して欲しいマクロ】 ANo.1の方が記載されているマクロです。 【エラーの内容】 次のコードが黄色くなっています。 Range(Range("c7"), lstPJ).AdvancedFilter Action:=xlFilterInPlace, _ CriteriaRange:=Range(Range("h7"), lstList), Unique:=False *この内容については、実際のデータを提示しないと、何処に何があるのか皆様には解らないと思いますが、念の為、記載しました。 お手数をおかけいたしますが、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Wendy02様 ご指摘ありがとうございます 絞り込みの条件がH7セルから書かれているなら For idx = 7 To 100 にしないと、1行目~6行目の空白を拾いますね。 ここも確認してください
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
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
お礼
Wendy02さん、お礼が大変遅くなり申し訳ありませんでした。 また、質問の記述にもご指摘いただき、ありがとうございました。 次回より、言葉を選らんで質問したいと思います。 ご回答いただき、どうもありがとうございました。
- zap35
- ベストアンサー率44% (1383/3079)
エラーコードは何ですか? この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 をそれぞれ挿入してみたら、正しい最終セルを取得できているかがわかると思います
お礼
zap35さん、お礼が大変遅くなり申し訳ありませんでした。 初心者のため、わからないながら実行しましたが、まだできませんので、もう少し勉強したいと思います。 何度もご回答をいただき、本当に感謝いたします。 また、不適切な記述がありましたことを、お詫び申し上げます。 これに懲りず、またご回答頂ければ幸いです。 今回は本当にどうもありがとうございました。