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

Excel 2007 マクロ AdvancedFilterについて(再投稿)
先ほど同じ質問を投稿したのですが、画像を添付していませんでした。削除できないため再度投稿しました。
元データ(Sheet1)の表が4つあります。元データは画像に添付しました。
この表で製品名かぼちゃで「空白」と「-」以外の数値が入っている行をSheet3にコピーして貼り付けるマクロを作成しています。
<Sheet2>
製品名その他
かぼちゃ<>
かぼちゃ-

下記マクロを実行したところ、Sheet3にはA列の番号のみ表示されます。
Sub Test1()
Sheets("Sheet1").Range("A1:E34").AdvancedFilter xlFilterCopy, _
Sheets("Sheet2").Range("A1", Sheets("Sheet2").Cells.SpecialCells(xlCellTypeLastCell).Address), _
Sheets("Sheet3").Range("A1")
End Sub
<Sheet3>
A列は空白です。
B列からE列は表示されていません。

どのように修正すればよろしいでしょうか。

「Excel 2007 マクロ Advan」の質問画像

A 回答 (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のワークシート上の各セルの記入状況を添えて,追加ご質問を投稿なさってみてください。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。詳細にチェック項目を記載していただき、順を追って作業をしたいと思います。うまくいかない場合には、追加で質問させていただきます。

お礼日時:2010/04/22 09:04

フィルタオプションはあまり知らないのと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/v …

エクセルにはマクロの記録というのがあります
それをやってみて、ソースをいじったほうが簡単とは思います
やり方はここになります
http://www.eurus.dti.ne.jp/~yoneyama/Excel/vba/v …
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。ご回答頂きました内容とURLを確認して作業を行います。

お礼日時:2010/04/21 09:33

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