[[20120524165313]] 『VBA オートフィルタの設定』(サン) ページの最後に飛ぶ

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

 

『VBA オートフィルタの設定』(サン)

VBA初心者です。エクセル2003です。よろしくお願いします。
 
A8:Z8にオートフィルタをかけいて、W2とX2には数式で検索結果(文字)
がでる様にしています。
実行したい事が、W2の値が変更したら、フィルタがかかっていれば解除し
再度A8:Z8にフィルタをかけ、E列のオートフィルタオプションで
W2と等しい OR X2と等しいという設定で抽出したいのですが出来ません。

アドバイスお願いします。

Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Address = Range("W2").Address Then
 If ActiveSheet.AutoFilterMode = False Then
  Range("A8:BG8").Select

     Selection.AutoFilter
  End If
    Selection.AutoFilter
     Range("A8:BG8").Select
      Selection.AutoFilter

Range("E8").AutoFilter Field:=5, Criteria1:=Range("W2"), Operator:=xlOr, _

        Criteria2:=Range("X2")
End If
End Sub


数式でW2が変化するなら
Calculateイベントじゃないかな
(みやほりん)

 すでに、みやほりんさんから回答があるけど、計算式によるセルの値の変化では、残念ながらChangeイベントが発生しないので
 Calculateを使わざるを得ない。

 ただ、アップされたコード自体、ちょっと見直した方がいいかな。
 実際には、必ずオートフィルターがかかっている状況だろうから、必ずRange("A8:BG8").Select は実行されるんだけど
 純粋ににコードだけを見ると、上の If で条件に合わなければSelectされない。
 なのに、End If の直後で、Selection を使っているね。
 そもそもが Select/Selection は使わないほうがいい。

 以下、コード記述の一例。

 Private Sub Worksheet_Calculate()
    'フィルターが設定されていればいったん解除
    If Me.AutoFilterMode Then Me.AutoFilter.Range.AutoFilter
    Range("A8:BG8").AutoFilter      'あらためて範囲指定でオートフィルター設定
    'フィルタリング実行
    Me.AutoFilter.Range.AutoFilter Field:=5, Criteria1:=Range("W2"), Operator:=xlOr, Criteria2:=Range("X2")
 End Sub

 (ぶらっと)

コメント返信:

[ 一覧(最新更新順) ]


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