|    | 
     ▼亜矢 さん: 
 
おじゃまします 
 
> 絞り込まれているのは取得できるのですが、 
> 私は知りたいのは絞り込まれている順番です。 
> たとえばD列が1番目でA列が2番目でフィルターを掛けると 
> 上記のソースはA列から順番に調べていくので、A列が1番になり、 
> D列が2番目となってしまい、問題です。 
 
ちょっと何が問題なのか分からないです。 
たとえば、A列〜G列の表があったとして、 
そのD列とB列に、この順番でフィルタをかけたとします。 
 
'D列とB列に この順番でフィルタをかける 
Sub Test1() 
 Dim fRange As Range 
 Set fRange = Range("A1").CurrentRegion.Resize(, 4) 
 ActiveSheet.AutoFilterMode = False 
 fRange.AutoFilter 4, ">=30" 'D列にAutoFilterをかける 
 fRange.AutoFilter 2, "B"   'B列にAutoFilterをかける 
  
'この状態で、つづいて以下のリンク先のコードを実行しますと... 
 Dim i& 
 For i = 1 To ActiveSheet.AutoFilter.Filters.Count 
   If ActiveSheet.AutoFilter.Filters(i).On Then 
     MsgBox i & "列目で絞り込まれています" 
   End If 
 Next i 
 
'→ 「2列目と4列目で絞り込まれています」となります  
 
 fRange.AutoFilter 
 
End Sub 
 
フィルタをかける列をB〜D列の3列に限定して、まったく同じ 
フィルタをかけることも可能です。 
 
'D列とB列に この順番でフィルタをかける 
Sub Test2() 
 Dim fRange As Range 
 Set fRange = Range("A1").CurrentRegion.Offset(, 1).Resize(, 3) 
 ActiveSheet.AutoFilterMode = False 
 fRange.AutoFilter 3, ">=30"  '◆D列にAutoFilterをかける 
 fRange.AutoFilter 1, "B"   '◆B列にAutoFilterをかける 
 
'つづいて、先ほどのFilters(i).Onを調べると、 
'→ 「1列目と3列目で絞り込まれています」となります 
ということは 「B列とD列で絞り込まれている」ことに他なりませんから、 
 
Sub Test1()とSub Test2()はともに 
 .AutoFilter.Filters(i).On  
 により 
正しくフィルタで絞り込まれている列が取得できたことを意味します。  
 
最初D列にフィルタがかけられ、その後 B列にフィルタがかけられた 
ことは、Filters(i).On からは知ることができません。 
でも、フィルタで抽出されるデータは 
D列→ B列 の順でAutoFilterをかけようと、 
B列→ D列 の順でAutoFilterをかけようと、結果は同じです。 
 
複数列にフィルタがかけられるとき、フィルタかける列の順番で 
フィルタリング結果が変わってくることはないと思いますので、 
どのような目的でフィルタがかけられた順番を知りたいのか? 
分からないのですが。 
 | 
     
    
   |