- ベストアンサー
複数のシートにまたがり、フィルタオプションの設定から値を抽出するマクロ
- 複数のシートにまたがり、フィルタオプションの設定から値を抽出するマクロを組んでおります。
- 非表示シートの状態で処理することはできませんでしょうか。
- 表示したくないシート(data,output)を非表示にしたら、エラーが出てしまいました。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
フムフム。。 まずご質問の核心として,お話ししたようにエラーは「セレクトしないマクロに改修する」事で回避できます。 ハイパーリンクの件は当初のお話しになかったので,それでは仕方ないのでxlfiltercopyはxlfilterinplaceに戻しましょう。 残念ながらまだ >そのままでは、ハイパーリンクが消えてしまうからなのです。 「どこに」ハイパーリンクが埋めてあるのか,お手許の実際のエクセルの姿が情報提供不足なので,こうしたらいいですよと「答え」まで書いてお見せする事が出来ません。 という訳でまずは回答のサンプルマクロに倣って,自力でお手許の実際のブックに見合うよう「Selectしないマクロ」に修正してみてください。全ての「Select」と「Selection」を,徹底的に無くしてください。 コピー貼り付けについては,試しに worksheets("data").range("A1").CurrentRegion.copy _ destination:=worksheets("マップ").range("E5") などのような書きぶりでやってみたらどうかなと思います。 上手く行かなかったり不明の点は,「ここまで自力でやってみたら,ここがこんな具合に失敗しました」とまたその都度の状況説明を(実際にその時点で動かしたマクロと,実際のエクセルの姿と共に)添えて追加ご質問として投稿してみてください。
その他の回答 (1)
- keithin
- ベストアンサー率66% (5278/7941)
非表示にしたシートのセルをSelectすることは出来ない(エラーになる)ので,セレクトしないマクロに修正します。 ついでにフィルタオプションの設定で「選択範囲内」ではなく「指定した範囲」の設定を使い,目的の場所にダイレクトに結果を書き出させます。 [ポイント] その際,フィルタオプションの設定の操作は「書き出させたいシートを表にした状態」で操作を開始します。 結果して言うと,今のマクロでOutputシートを使う必要も無くなります。 Sub Macro7r1() Sheets("data").Columns("A:J").AdvancedFilter _ Action:=xlfiltercopy, _ CriteriaRange:=Sheets("マップ").Range("E2:N3"), _ copytorange:=worksheets("マップ").range("E5"), _ Unique:=False End Sub
お礼
確かに、シートを非表示でも出来ました。 しかし、1列しか貼り付けされず、また、ハイパーリンクも解除されてしまいます。 度々、お手数ですが、ご教示のほどよろしくお願いします。
補足
ありがとうございます。 試してみますが、 outputシートにわざわざ貼り付けてるわけは、そのままでは、ハイパーリンクが消えてしまうからなのです。 上記方法なら大丈夫なのでしょうか。
お礼
できるときと、できないときとがあります。 症状としましては、 なんとなくわかってきたのですが、 1.outputシートの好き勝手なところに、pastしてしまう。 (できれば、A1のセルを基準に貼り付けたい) 2.最後のdataシートで、ActiveSheet.ShowAllDataがうまくできない。 の2点です。 引き続きどうぞよろしくお願いします。
補足
ありがとうございます。 selectionをとって、F8を押しながら、動作を確認したところ、 下記のマクロで、どうにかできそうです。 マップシートは、表示にしたいので、selectionはつけたままです。 まだ、シートを非表示にして実行しておりませんが、 内容をご確認いただきたく存じます。 お手数をおかけします。 Sub Macro7() Sheets("data").Columns("A:J").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:= _ Sheets("マップ").Range("E2:N3"), Unique:=False Sheets("data").Columns("A:J").Copy Sheets("output").Paste Application.CutCopyMode = False Selection.Copy Sheets("マップ").Select Range("E5").Select ActiveSheet.Paste Application.CutCopyMode = False Sheets("data").Select Application.CutCopyMode = False ActiveSheet.ShowAllData Sheets("マップ").Select End Sub