Excel VBA質問箱 IV

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

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


13897 / 76733 ←次へ | 前へ→

【68338】Re:オートフィルター
発言  kanabun  - 11/2/24(木) 16:27 -

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

おじゃまします

> 絞り込まれているのは取得できるのですが、
> 私は知りたいのは絞り込まれている順番です。
> たとえば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をかけようと、結果は同じです。

複数列にフィルタがかけられるとき、フィルタかける列の順番で
フィルタリング結果が変わってくることはないと思いますので、
どのような目的でフィルタがかけられた順番を知りたいのか?
分からないのですが。

1 hits

【68318】オートフィルター 亜矢 11/2/23(水) 16:58 質問
【68323】Re:オートフィルター neptune 11/2/23(水) 22:45 発言
【68324】Re:オートフィルター 亜矢 11/2/24(木) 1:16 質問
【68325】Re:オートフィルター SK63 11/2/24(木) 1:39 発言
【68326】Re:オートフィルター 亜矢 11/2/24(木) 2:53 お礼
【68338】Re:オートフィルター kanabun 11/2/24(木) 16:27 発言

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