- ベストアンサー
Excel 2007 マクロ AdvancedFilterについて(再投稿)
- 先ほど投稿された質問に、画像を添付することができず、削除もできなかったため再度投稿しました。Excel 2007 マクロ AdvancedFilterを使用して、表の製品名が「かぼちゃ」で、「空白」と「-」以外の数値が入っている行をSheet3にコピーするマクロを作成しています。しかし、実行した結果、Sheet3にはA列の番号のみ表示され、B列からE列が表示されていません。
- 質問者は、Excel 2007でマクロを使用して、特定の条件を満たす行をコピーしてSheet3に貼り付ける必要があります。条件は、表の製品名が「かぼちゃ」であり、「空白」と「-」以外の数値が入っていることです。質問者はAdvancedFilterを使用して実行しようとしていますが、うまくいかないようです。
- 正しい結果を得るために、質問者はマクロを修正する必要があります。具体的な修正方法は不明ですが、おそらくAdvancedFilterの引数や範囲の指定が間違っている可能性が考えられます。修正方法については、Excel 2007のドキュメントやオンラインリソースを参考にすることをおすすめします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
AdvancedFilter(2007ではフィルタの詳細設定,以前のエクセルでは「フィルタオプションの設定」)の機能については,マクロ以前にまず手動でエクセル画面上でフィルタの詳細設定を正しく使えるように,エクセルの勉強をしてください。 いま出来ないのは,9割方マクロの問題ではありません。 ポイントその1) リスト範囲(シート1)のリストの先頭行 および 検索条件範囲(シート2)の先頭行 には,「見出し行」として各列を識別する言葉がそれぞれのセルに記入されていなければいけません。 いまのそのマクロでは 1行目:Sheets("Sheet1").Range("A1:E34").AdvancedFilter リスト範囲としてシート1の1行目から取っています。 でも実際の1行目には<野菜>と書いてあるだけで,B列C列D列E列は空っぽのままなので,ここがマズ駄目です。 現在の表を生かすなら,最低でも 1行目:Sheets("Sheet1").Range("A2:E34").AdvancedFilter として,2行目の「番号」「製品名」「外国産」「国産」「その他」の各セルを,タイトル行にします。 検索条件範囲についても同様です。 #ただしこのようにすると,1行目は検索条件範囲では無くなりますので,抽出先のシート3には1行目の「<野菜>」は書き出せません。この点はとりあえず後回しにして,後刻できるようになってから必要に応じて工夫してください。 ポイントその2) いま具体的にシート2にどのように作成して絞り込ませようとしたのか,まず不明です。 で,回答してみようと思いましたが困ったことに >製品名かぼちゃで「空白」と「-」以外の数値が入っている行を いったい何を絞り込みたいのか判りません。 勿論製品名にかぼちゃと書いてある行をまず取り出したいぐらいは判りますが,あとの条件がさっぱりです。 このシート2(検索条件範囲・クライテリア領域)の記入,作成のやり方は,既出回答でアドバイスとして寄せられているページを始めとして,ネットで「フィルタオプションの設定」でちょっと検索してみてください。手順を丁寧に図解してあるページが多数ヒットしますので,それらを参考に「まず手でエクセルを操って,希望の抽出ができるクライテリア領域の作成」までちゃんと出来るようになってください。 これが出来れば,マクロも7割方上手く動きます。 ポイントその3) 検索条件範囲の与え方 2行目:Sheets("Sheet2").Range("A1", Sheets("Sheet2").Cells.SpecialCells(xlCellTypeLastCell).Address), としていますが,間違った範囲を取り込むと正常な結果が得られません。 こちらもまず手動でフィルタオプションの設定が完全に使えるようになってから,正しくその範囲を取得できる方法を検討して,マクロに書き込んでください。 行き詰まったら,最低限「こう考えて,手でここまで作成しました」というシート2のワークシート上の各セルの記入状況を添えて,追加ご質問を投稿なさってみてください。
その他の回答 (1)
- enjoyhotlife
- ベストアンサー率25% (1/4)
フィルタオプションはあまり知らないのとVBA2007を知らないですがわかる範囲になります そもそもAdvancedFilterはエクセルのフィルタオプションです なので表の作り方がまずいと思います 画像では、表がわかれているので、それぞれの表に対してフィルタを設定するのはわかるのですが 範囲指定が一括にされているようにみえます エクセルの表の性質的にわかれているのはできるのかな?というのがまず疑問です ヘッダーをひとつにして 空白などは削除してみてください カテゴリーをわけたければさらに列にカテゴリーを追加するといいでしょう(野菜などです) さらにSheet3に貼り付けをしたいと思うのですがコピーはしているけどペーストしていません Sheets("Sheet3").Range("A1") -> Sheets("Sheet3").select Range("A1").Select ActiveSheet.Paste ここはもしかしたら2007では一括で Sheets("Sheet3").Range("a1").Paste とできるかもしれませんので試してみてください おそらくこのURLにやりたいことはのっていると思いますhttp://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_advancedfilter.html エクセルにはマクロの記録というのがあります それをやってみて、ソースをいじったほうが簡単とは思います やり方はここになります http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/vba_01_2007.html
お礼
ご回答ありがとうございました。ご回答頂きました内容とURLを確認して作業を行います。
お礼
ご回答ありがとうございました。詳細にチェック項目を記載していただき、順を追って作業をしたいと思います。うまくいかない場合には、追加で質問させていただきます。