[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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
すでに、みやほりんさんから回答があるけど、計算式によるセルの値の変化では、残念ながら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.