[[20140828112836]] 『オートフィルタについてお尋ね』(事務員D) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『オートフィルタについてお尋ね』(事務員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

早速のご返事ありがとうございます。
(Mook) さま 
 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

(Mook) さま 
はい、おかげさまでばっちり動きました。
ありがとうございました。
いま、気づいたのですがアクセスからのデータなので数値は文字列で入れていました。
これも悪い原因の一つだったのでしょうか?

(事務員D) 2014/08/28(木) 15:25


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.