[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『オートフィルターの自動化について』(応用できない子)
Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "A1" Then If ActiveSheet.FilterMode Then Cells.AutoFilter With Range(Range("A2"), Range("A2").End(xlToRight).End(xlDown)) .AutoFilter Field:=1, Criteria1:=Target.Text End With End If End Sub
と過去ログから応用させていただこうとしてます A1に入力するとA列を自動でフィルターがかかるというものだそうです。 が私は、D2に入力したものがC列を自動でフィルターをかけたいのです。 B7からU7が項目名で実際のデータはB8からU500にあります
素人変更↓ Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "D2" Then If ActiveSheet.FilterMode Then Cells.AutoFilter With Range(Range("C7"), Range("C7").End(xlToRight).End(xlDown)) .AutoFilter Field:=1, Criteria1:=Target.Text End With End If End Sub としたのですがうまくいきません。 なぜかB列でフィルターがかかり、何も表示されていません 助けてください(>_<) (~_~;) 過去ログの2行目は項目で、3行目からデータが入っているのですが。 (@_@;) <m(__)m>とほほほほほほほほほほほほ(^^ゞ
オートフィルタは自動的にCurrentRegionを認識してしまうので、 Range(Range("C7"), Range("C7").End(xlToRight).End(xlDown)) としてもB列も含めたデータを認識してしまっていると推測。 引数Fieldがフィルタ範囲での列位置をあらわすので、 Field:=2 としてみるとどうなりますか。 (みやほりん)
うわぁーーーーーーーーーーーーーできました。感激ーーーーーーー 出勤の為、化けている間に、ご回答ありがとうございます。Q学中にもかかわらず、 朝早くから、ありがとう御座いました。(応用できない子)(●^o^●) もうひとつすみません。このマクロは次をソートする際、いったんすべて表示 しないと、フィルターの列が、c列に変わってしまいましたのですが、 続けて、フィルターをかけても、問題が起こらないようにすることは可能なのでしょうか すみません。
「次をソート」=並べ替えを行っているのですか 「フィルターの列が、c列に変わってしまいました」 =C列でフィルタ、ということだと理解しております。 どういう現象が起こっているのか、イメージできないので、 「行った操作」「希望する動作」「実際に起こっている現象」を 具体的に書いていただけますか?(みやほりん)
VBAのhelpで「AutoFilter メソッド」の解説を読んでみると勉強になりますよ。
以下抜粋です 。 (なお)
AutoFilter メソッド
関連項目 対象 使用例 アプリケーション情報
オートフィルタを使ってリストにフィルタをかけます。バリアント型 (Variant) の値を使用します。
メモ AutoFilter オブジェクトを返すには、Worksheet オブジェクトの AutoFilter プロパティを適用します。
expression.AutoFilter(Field, Criteria1, Operator, Criteria2, VisibleDropDown)
expression 必ず指定します。対象となるオブジェクトへの参照を返すオブジェクト式を指定します。
Field 必ず指定します。バリアント型 (Variant) の値を使用します。フィルタの対象となるフィールド番号を整数で指定します。フィールド番号は、リストの左側から始まります。つまり、最も左側にあるフィールドはフィールド番号 1 になります。
Criteria1 省略可能です。バリアント型 (Variant) の値を使用します。抽出条件となる文字列 ("101" など) を指定します。"=" と指定すると、空白セルが抽出され、"<>" と指定すると空白以外のフィールドが抽出されます。この引数を省略すると、抽出条件は All になります。引数 Operator に xlTop10Items が指定されている場合は、引数 Criteria1 に項目数を指定します (たとえば "10")。
Operator 省略可能です。XlAutoFilterOperator クラスの定数を使用します。
使用できる定数は、次に示す XlAutoFilterOperator クラスのいずれかです。
xlAnd (既定値)
xlBottom10Items
xlBottom10Percent
xlOr
xlTop10Items
xlTop10Percent
引数 Criteria1 および Criteria2 で xlAnd と xlOr を使って組み合わせて、複合抽出条件を指定します。
Criteria2 省略可能です。バリアント型 (Variant) の値を使用します。2 番目の抽出条件となる文字列を指定します。引数 Criteria1 および引数 Operator と組み合わせて使い、複合抽出条件を指定します。
VisibleDropDown 省略可能です。バリアント型 (Variant) の値を使用します。True を指定すると、フィルタのフィールドのオートフィルタのドロップダウン矢印を表示します。False を指定すると、フィルタのフィールドにオートフィルタのドロップダウン矢印を非表示にします。既定値は True です。
解説
すべての引数を省略すると、このメソッドは指定したセル範囲でのオートフィルタのドロップダウン矢印を表示します。
使用例
次の使用例は、シート 1 のセル A1 から始まるリストの中で、フィールド 1 が "東京" という文字列であるレコードだけを表示します。フィールド 1 のドロップダウン矢印は非表示になります。
Worksheets("Sheet1").Range("A1").AutoFilter _
field:=1, _ Criteria1:="東京" VisibleDropDown:=False
みやほりん様、なお様ありがとうございます。 今帰ってきました。そして見直しすると、矛盾していることを書き込んでいました。 申し訳ございません。やはり、朝は化けるのが大変で、いつも以上におかしくなってました。 落ち着いて、書かせていただきます。(ほんまかいな)(@_@;) >「次をソート」=並べ替えを行っているのですか 行っておりません。抽出でした。(~_~;) D2に入力をして、抽出し、また、D2に続けて、入力して 抽出しようとしたら、C列の抽出がD列に変わって、項目以外下は何も表示されない状態になってます。 一旦、すべて表示してから、抽出した方がよいのでしょうか? できれば、続けて抽出をし続けたいのですが、 >「フィルターの列が、c列に変わってしまいました」 お馬鹿でした、D列の間違いです。 > =C列でフィルタ、ということだと理解しております。 C列でフィルターです。間違いございません。<(_ _)>(応用できない子)
一応確認してみましたが、見出しがB列からなら、 対象範囲をそのように手直ししたほうが安定するようです。 また、オートフィルタ解除の条件を 「D2の文字長が0(D2に何も入力されていない)」に変更してみました。(みやほりん) Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(0, 0) = "D2" Then With Range(Range("B7"), Range("B7").End(xlToRight).End(xlDown)) .AutoFilter Field:=2, Criteria1:=Target.Text End With If Len(Target) = 0 Then Cells.AutoFilter End If End Sub
非常ーに遅くなりました。すみません。<m(__)m> うまくいきました。Q学中にもかかわらず、ありがとうございました。 ホームページ更新楽しみにしてます。(応用できない子)
お役に立てて何より&声援ありがとう。 HPは「ぼちぼちいこか」なので、時間はかかりますが、 がむばってやってます。(朝練だけ参加中 みやほりん)
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.