[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルタについてお尋ね』(事務員D)
以下のコードを実行すると正常に動きません。
P1には得意先コード番号
Q1には担当者コード番号
R1には商品コード番号を入力し抽出、Sheet3に転送コピーしています。
各コード番号に誤りがある場合は"該当なし"とメッセージを上げたいのですが、
Sheet1は抽出されず空っぽでSheet3には全データがコピーされます。
間違いを教えてください。
Sub オートフィルタD()
Application.ScreenUpdating = False ActiveWorkbook.Worksheets("Sheet1").Activate
ActiveSheet.AutoFilterMode = False If Application.CountIf(Range("A2:A10000"), Range("P1")) = 0 Or _ Application.CountIf(Range("L2:L10000"), Range("Q1")) = 0 Or _ Application.CountIf(Range("C2:C10000"), Range("R1")) = 0 Then MsgBox "該当なし" ActiveWorkbook.Worksheets("Sheet3").Activate Else
Range("A1:L1").Select Selection.AutoFilter Selection.AutoFilter Field:=1, Criteria1:=Range("P1").Value Selection.AutoFilter Field:=12, Criteria1:=Range("Q1").Value Selection.AutoFilter Field:=3, Criteria1:=Range("R1").Value
ActiveWorkbook.Worksheets("Sheet3").Activate
Sheets("Sheet1").Range("A2:O10000").Copy _ Sheets("Sheet3").Range("B10") Sheets("Sheet1").Range("A2:O10000").Copy Sheets("Sheet3").Range("B10").PasteSpecial xlPasteValues
Application.CutCopyMode = False Range("B2").Select
End If
End Sub
< 使用 Excel:Excel2013、使用 OS:Windows7 >
P1,Q1,R1 も Sheet1 にあるセルですか?
(Mook) 2014/08/28(木) 12:13
関係ないことかもしれませんが、
> Range("A1:L1").Select
という書き方が自分はきらいです。なぜって AutoFilterは[A1:L10000]とかの 複数行に対して実行するのですから。列見出しにAutoFilterかけるのではないはずです。 (Excel2007 の初期バージョンではこのことによる抽出されない不具合が実際ありました) (kanabun) 2014/08/28(木) 12:57
Sheet3に書いて Sheet1 には=Sheet3!B4この様にぴっばっています。
(kanabun)さま
マクロの記録で作ったのですが間違っているのですか?
(事務員D) 2014/08/28(木) 13:42
検索条件の P1,Q1,R1 は必ず3つとも入力され、空白は無いという運用でしょうか。
元データは Sheet3 でも、検索文字は Sheet1 にあるということですね。 式参照だと、空文字でも 0 になりそうな気がしますが、検索文字を直接指定するか、 参照部分も
=If(Sheet3!B4="","",Sheet3!B4) のようにし、
If Application.CountIf(Range("A2:A10000"), Range("P1")) = 0 Or _ Application.CountIf(Range("L2:L10000"), Range("Q1")) = 0 Or _ Application.CountIf(Range("C2:C10000"), Range("R1")) = 0 Then を If (Range("P1").Value<>"" And Application.CountIf(Range("A2:A10000"), Range("P1").Value) = 0 ) _ Or (Range("Q1").Value<>"" And Application.CountIf(Range("L2:L10000"), Range("Q1").Value) = 0 ) _ Or (Range("R1").Value<>"" And Application.CountIf(Range("C2:C10000"), Range("R1").Value) = 0 ) Then にしてどうでしょうか。 (Mook) 2014/08/28(木) 13:59
(事務員D) 2014/08/28(木) 15:25
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.