Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1026 / 13645 ツリー ←次へ | 前へ→

【76779】AutoFilterで3つ以上の絞り込み方法 亜矢 15/3/11(水) 14:36 質問[未読]
【76780】Re:AutoFilterで3つ以上の絞り込み方法 β 15/3/11(水) 15:37 発言[未読]
【76781】Re:AutoFilterで3つ以上の絞り込み方法 亜矢 15/3/11(水) 20:19 質問[未読]
【76782】Re:AutoFilterで3つ以上の絞り込み方法 β 15/3/11(水) 21:13 発言[未読]
【76783】Re:AutoFilterで3つ以上の絞り込み方法 マナ 15/3/11(水) 21:52 発言[未読]
【76784】Re:AutoFilterで3つ以上の絞り込み方法 β 15/3/11(水) 22:05 発言[未読]
【76787】Re:AutoFilterで3つ以上の絞り込み方法 亜矢 15/3/12(木) 8:56 お礼[未読]
【76785】Re:AutoFilterで3つ以上の絞り込み方法 kanabun 15/3/11(水) 23:01 発言[未読]

【76779】AutoFilterで3つ以上の絞り込み方法
質問  亜矢  - 15/3/11(水) 14:36 -

引用なし
パスワード
   よろしくお願いします
現在は運輸会社2つの会社以外をAutoFilterで絞っています。
.Range("A5").AutoFilter Field:=1, Criteria1:="<>*黒猫*", Operator:=xlOr, Criteria2:="<>*佐川*"

 これを3つの会社以外(黒猫、佐川、西濃)のものを絞りこむ方法をArrayを使って行いたいと思います。
 旨くできません。方法を教えてください。

【76780】Re:AutoFilterで3つ以上の絞り込み方法
発言  β  - 15/3/11(水) 15:37 -

引用なし
パスワード
   ▼亜矢 さん:

手作業操作でできるなら基本的にマクロでできるでしょうね。
手作業操作でできなければ(おそらくシートのUserInterface:=True付の保護を除き)
マクロではできないでしょうね。

リストの右側にA列と同じものをコピーした上で、その列も含めてオートフィルター設定。
この列は非表示でかまいません。
その列に対して
.Range("A5").AutoFilter Field:=●, Criteria1:="<>*西濃*"

こうしてやれば、目的は達成できると思いますが。

【76781】Re:AutoFilterで3つ以上の絞り込み方法
質問  亜矢  - 15/3/11(水) 20:19 -

引用なし
パスワード
   ▼β さん:
>▼亜矢 さん:
>
>手作業操作でできるなら基本的にマクロでできるでしょうね。
>手作業操作でできなければ(おそらくシートのUserInterface:=True付の保護を除き)
>マクロではできないでしょうね。
>
>リストの右側にA列と同じものをコピーした上で、その列も含めてオートフィルター設定。
>この列は非表示でかまいません。
>その列に対して
>.Range("A5").AutoFilter Field:=●, Criteria1:="<>*西濃*"
>
>こうしてやれば、目的は達成できると思いますが。
さっそくのご指導ありがとうございます。
他の所でArrayを使った例が載っていました。それは
ActiveSheet.Range("$A$1:$B$9").AutoFilter Field:=1, Criteria1:=Array("田中", "土屋", "鈴木"), Operator:=xlFilterValues
上の例は田中、土屋、鈴木ですが、これを田中や土屋や鈴木で無い場合の
検索はどの様に表記したらよいでしょうか。
よろしくお願いします。

【76782】Re:AutoFilterで3つ以上の絞り込み方法
発言  β  - 15/3/11(水) 21:13 -

引用なし
パスワード
   ▼亜矢 さん:

xlFilterValues は、それこそ、いくつでも、抽出文字列を「配列で指定できます。
でも、「抽出する文字列」なんです。"<>なんとか" といった 「式」は指定できないんです。
いつか、xl2020 ぐらいのバージョンで、サポートされるかもしれませんが。
その時は、もしかしたら xlFilterFormulas なんてもので配列指定ができるようになるかも
しれませんね。

まぁ、今はできないということで。

【76783】Re:AutoFilterで3つ以上の絞り込み方法
発言  マナ  - 15/3/11(水) 21:52 -

引用なし
パスワード
   無駄なことしているようなような気もしますが
除外したいもの除いた配列を作成してはいかがでしょうか。

Sub test()
  Dim a
  Dim d As Object
  Dim v
  Dim i As Long
  
  a = Array("田中", "土屋", "鈴木")
  
  Set d = CreateObject("scripting.dictionary")
  
  ActiveSheet.AutoFilterMode = False
  v = Range("a1").CurrentRegion.Columns(1).Value
  
  For i = 1 To UBound(v)
    d(v(i, 1)) = Empty
  Next
  
  For i = 0 To UBound(a)
    If d.exists(a(i)) Then d.Remove (a(i))
  Next
  
  Range("a1").CurrentRegion.AutoFilter Field:=1, _
    Criteria1:=d.keys, _
    Operator:=xlFilterValues
  
End Sub

【76784】Re:AutoFilterで3つ以上の絞り込み方法
発言  β  - 15/3/11(水) 22:05 -

引用なし
パスワード
   ▼マナ さん:

わぁわぁ、逆転の発想ですね。
これ、いいかもですね。
今度、同様の質問がどこかであったら、しらっとして、βの回答としてアップするかも?
いえいえ、そんなことはしませんよ。
そういう機会があれば、「マナさんのアイデアです」と明記します。

【76785】Re:AutoFilterで3つ以上の絞り込み方法
発言  kanabun  - 15/3/11(水) 23:01 -

引用なし
パスワード
   ▼亜矢 さん:

> これを3つの会社以外(黒猫、佐川、西濃)のものを絞りこむ方法

AutoFilterではないですが、AdvancedFilterで複雑な条件を指定できます。
ただし、条件はシートに書き込みます。

(以下は AA,AB,AC 列に 条件を書きこむものとします)
   AA      AB    AC
1  会社名    会社名  会社名
2  <>*ヤマト*  <>*佐川* <>*西濃*
3

Sub advTest()
  Dim rt As Range
  Dim rc As Range
  Set rt = Range("A5").CurrentRegion
  Set rc = Range("AA1").Resize(2, 3)  'AA列以降に条件を書きこむ
   rc.Rows(1).Formula = "=$A$5" 'A列タイトル「会社名」
   rc(2, 1).Formula = "<>*ヤマト*"
   rc(2, 2).Formula = "<>*佐川*"
   rc(2, 3).Formula = "<>*西濃*"
  
  rt.AdvancedFilter xlFilterInPlace, rc
End Sub

これなら条件がいくつでも可能です。

【76787】Re:AutoFilterで3つ以上の絞り込み方法
お礼  亜矢  - 15/3/12(木) 8:56 -

引用なし
パスワード
   ▼マナ さん:
>無駄なことしているようなような気もしますが
>除外したいもの除いた配列を作成してはいかがでしょうか。
>
>Sub test()
>  Dim a
>  Dim d As Object
>  Dim v
>  Dim i As Long
>  
>  a = Array("田中", "土屋", "鈴木")
>  
>  Set d = CreateObject("scripting.dictionary")
>  
>  ActiveSheet.AutoFilterMode = False
>  v = Range("a1").CurrentRegion.Columns(1).Value
>  
>  For i = 1 To UBound(v)
>    d(v(i, 1)) = Empty
>  Next
>  
>  For i = 0 To UBound(a)
>    If d.exists(a(i)) Then d.Remove (a(i))
>  Next
>  
>  Range("a1").CurrentRegion.AutoFilter Field:=1, _
>    Criteria1:=d.keys, _
>    Operator:=xlFilterValues
>  
>End Sub
まだ完全解決とは行きませんが、参考にして研究してみます。
ありがとうございました。

1026 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free