[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『マクロでの資料作り[オートフィルタ・VLOOK]』(takako)
いつも参考にさせていただいています。
今回、今まで手動で毎月1回行っていた資料作りを、
何とかマクロで行えないかと思い、質問いたします。
(過去の履歴を検索したのですが、よくわかりませんでした。)
なにぶん、初心者なので、わかりづらいところがあればご指摘ください。
Excelバージョン : Excel2003
OSバージョン : WindowsXP
シート「元データ」に、
A B C D E
1 日付 品名 合計金額 グループ 判別
2 4/1 みかん 30 みかん科 ○
3 4/3 ぶどう 100 ぶどう科
4 4/5 もも 120 もも科
5 4/1 みかん 30 みかん科 ○
上記のようなデータが2000行ほどあります。
マクロの記録で
元データのシートをコピー⇒品名をフィルター⇒判別をフィルター⇒シートをつくる
という風にやったのですが、
他のファイルで使おうとするとフィルターの部分でエラーがでてしまいます。
どこが悪いのでしょうか。。
よろしくお願いします。
Selection.Copy
Sheets("元データ").Select Sheets.Add Range("A1").Select ActiveSheet.Paste Sheets("元データ").Select Application.CutCopyMode = False Sheets("元データ").Move Before:=Sheets(1) Sheets("Sheet1").Select Range("A:B,D:G").Select Range("D1").Activate Selection.Delete Shift:=xlToLeft Range("1:7,9:9").Select Range("A9").Activate Selection.Delete Shift:=xlUp Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=3, Criteria1:="=*みかん*", Operator:=xlOr, _ Criteria2:="=*もも*" ↑この部分が黄色くなります。 Rows("575:575").Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents ・ ・ ・
エラーの内容はどのようなメッセージでしょうか? あと、フィルタかけたあとで、どのような処理をしたいのでしょうか。
(川野鮎太郎)
手元に実際のものがないのでエラーの内容はわからないのですが、 「品名」をフィルター ⇒選んだ行をすべて削除 ⇒「判別」をフィルタ ⇒それぞれのシートを作る として、データを整理したいと思います。 (takako)
遅くなりました。 >「RangeクラスのAutoFilterメソッドが失敗しました」 が出るってことは、そのVBAを使おうとしているファイルに フィルタ出来るデータがないってことではないでしょうか。 恐らく、 Range("A:B,D:G").Select Range("D1").Activate Selection.Delete Shift:=xlToLeft の部分で列データが削除されているので、 >Selection.AutoFilter Field:=3 ←3列目でフィルタ が出来ていないのでしょう。
他のファイルのデータがどのようになっていて、どのような処理を 具体的に、出来るだけ詳細にご提示いただければ、解決策があるかもしれません。
(川野鮎太郎)
3行目をフィルタしたい事はかわらなかったので、
下記のように行・列を消すマクロを変更したら、
上記のエラーは消えました。
(元データのシートのA・B・C〜G列までと、1〜5・7の行を消したいのは固定です。)
Sheets("Sheet1").Select
Rows("1:5").Select Selection.Delete Shift:=xlUp Rows("2:2").Select Selection.Delete Shift:=xlUp Columns("A:B").Select Selection.Delete Shift:=xlLeft Columns("B:E").Select Selection.Delete Shift:=xlLeft
しかし、下記のようにマクロを作ったら、
フィルタをして、削除したいもの以外のものも消えてしまいます。
行の指定が悪いのかと思うのですが、
どのように指定をすればよいかわかりませんでした。。
フィルタを行って特定の言葉が含まれているすべての行の削除を行いたく、
削除すべき行数はその時によって違います。
Rows("1:1").Select Selection.AutoFilter Selection.AutoFilter Field:=3, Criteria1:="=*もも*", Operator:=xlOr, Criteria2:="=*みかん*" Operator_ = xlOr Rows("3:3").Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Rows("523:523").Select Range(Selection, Selection.End(xlDown)).Select Range(Selection, Selection.End(xlToRight)).Select Selection.ClearContents Selection.AutoFilter Field:=3, Criteria1:="=*AAA*", Operator:=xlOr, Criteria2:="=*BBB*" Rows("3:3").Select Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents Selection.AutoFilter Field:=3 Range(Selection, Selection.End(xlDown)).Select Selection.ClearContents
必要な情報は足りているでしょうか。
お手数ですが、よろしくお願いします。
少し情報が不足のような気がします。 1行目から5行目と7行目は必ず削除するとのことですが、 当初の例題でいけば、全部消されてしまいますよね・・・。 試すためのデータとしては適してないのではないでしょうか。 もしも可能であれば、新規のブックにある程度のデータを作って、 以下のramrunさんのアップローダに、ファイルをアップしてみてください。 http://ryusendo.no-ip.com/cgi-bin/upload/upload.html
そのデータで、どのようにしたいのかを説明してください。
(川野鮎太郎)
サンプル拝見しました。 現在時間がないので、まだ詳しく見ていません。 夜にでもやってみますのでお待ちください。 放置されているとご心配なさるといけないので取り合えずコメントだけ(^_^A;
(川野鮎太郎)
(takako)
取り合えずピボットテーブルは無視してやってみました。 サンプルブックのSheet1、番号なし、番号有りの各シートのデータをクリアして マクロを実行してみてください。 Sub detahennkann() Dim Sh_元 As Worksheet Dim 売日 As Range, グ1 As Range, 額1 As Range, 番号 As Range Dim 正味 As Range, 事業 As Range, グ2 As Range, myMultiAreaRange As Range Dim Last_Row As Long, Last_R As Long Set Sh_元 = Worksheets("元データ") With Sh_元 Last_Row = .Range("C8").End(xlDown).Row '元データシートの最終行を取得し変数に代入 Set 売日 = .Range("C6:C" & Last_Row) 'C列のデータを変数に代入 Set グ1 = .Range("I6:I" & Last_Row) 'I列のデータを変数に代入 Set 額1 = .Range("V6:V" & Last_Row) 'V列のデータを変数に代入 Set 番号 = .Range("W6:W" & Last_Row) 'W列のデータを変数に代入 Set 正味 = .Range("Z6:Z" & Last_Row) 'Z列のデータを変数に代入 Set 事業 = .Range("AO6:AO" & Last_Row) 'AO列のデータを変数に代入 Set グ2 = .Range("AQ6:AQ" & Last_Row) 'AQ列のデータを変数に代入 Set myMultiAreaRange = Union(売日, グ1, 額1, 番号, 正味, 事業, グ2) '各列のデータを集合させて代入
With Worksheets("Sheet1") .Columns("A:G").ClearContents 'Sheet1のデータをクリア myMultiAreaRange.Copy Destination:=.Range("A1") '元データシートの必要データをSheet1にコピー .Cells.EntireColumn.AutoFit '列幅を調整 .Rows("2:2").Delete Shift:=xlUp 'Sheet1の2行目を削除 Last_R = .Range("A65536").End(xlUp).Row 'Sheet1の最終行を取得し変数に代入
'//////////// B列のフィルタ処理 ////////////// .Range("A1").AutoFilter Field:=2, _ Criteria1:="=EEEE", Operator:=xlOr, Criteria2:="=D" 'B列でEEEEまたはDをフィルタ .Rows("2:" & Last_R).Delete Shift:=xlUp 'フィルタしたデータを削除 .Range("A1").AutoFilter Field:=2, _ Criteria1:="A" 'B列でAをフィルタ .Rows("2:" & Last_R).Delete Shift:=xlUp 'フィルタしたデータを削除
'//////////// G列のフィルタ処理 ////////////// B列にCCCCCCが含まれているものの内G列のフィルタ .Range("A1").AutoFilter Field:=2, _ Criteria1:="CCCCCC" 'B列でCCCCCCをフィルタ .Range("A1").AutoFilter Field:=7, _ Criteria1:="=EEEE", Operator:=xlOr, Criteria2:="=D" 'G列でEEEEまたはDをフィルタ .Rows("2:" & Last_R).Delete Shift:=xlUp 'フィルタしたデータを削除 .Range("A1").AutoFilter Field:=7, _ Criteria1:="A" 'G列でAをフィルタ .Rows("2:" & Last_R).Delete Shift:=xlUp 'フィルタしたデータを削除 .ShowAllData '全て表示
'//////////// D列のフィルタ処理1 ////////////// D列が空白行をフィルタ .Range("A1").AutoFilter Field:=4, Criteria1:="=" Worksheets("番号無し").Columns("A:G").ClearContents '番号無しシートのデータをクリア
.Range("A1:G" & Last_R).Copy Destination:= _ Worksheets("番号無し").Range("A1") 'Sheet1のデータを番号無しシートにコピー
'//////////// D列のフィルタ処理2 ////////////// D列が番号あり行をフィルタ .Range("A1").AutoFilter Field:=4, Criteria1:="<>" Worksheets("番号あり").Columns("A:G").ClearContents '番号ありシートのデータをクリア .Range("A1:G" & Last_R).Copy Destination:= _ Worksheets("番号あり").Range("A1") 'Sheet1のデータを番号無しシートにコピー .ShowAllData '全て表示 End With Set Sh_元 = Nothing Set 売日 = Nothing Set グ1 = Nothing Set 額1 = Nothing Set 番号 = Nothing Set 正味 = Nothing Set 事業 = Nothing Set グ2 = Nothing Set myMultiAreaRange = Nothing End With End Sub
(川野鮎太郎)
家のパソコンでやってみたのですが、
excelのバージョンが2002だからか、
「オブジェクトが必要です」となり、
できませんでした。。
本当に無知で申し訳ないのですが、
月曜にまたやってみたいと思います。
(takako)
すいません・・・、1行抜けている部分がありました。 上のコードを修正していますので、再度コピペしてください。
(川野鮎太郎)
ありがとうございます! 無事できました。 マクロを記録してやっていたときより、 とても早くできました。。 しっかりマクロを組むととても早いんですね。 本当にありがとうございます!! (takako)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.