Excel VBA質問箱 IV

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

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


6549 / 13644 ツリー ←次へ | 前へ→

【44589】オートフィルターを元に戻す けんけん 06/11/22(水) 17:39 質問[未読]
【44591】Re:オートフィルターを元に戻す 飛ばない豚 06/11/22(水) 18:33 回答[未読]
【44592】Re:オートフィルターを元に戻す けんけん 06/11/22(水) 18:59 質問[未読]
【44609】Re:オートフィルターを元に戻す 飛ばない豚 06/11/24(金) 10:21 発言[未読]
【44610】Re:オートフィルターを元に戻す けんけん 06/11/24(金) 10:43 発言[未読]

【44589】オートフィルターを元に戻す
質問  けんけん  - 06/11/22(水) 17:39 -

引用なし
パスワード
   オートフィルターがかかっているシートについて
ある処理を実施し、そのオートフィルターを元に戻すというコードを
実装しようと思っています。
以下のようにした所、エラーが出てしまいました。

どのように修正したら良いのでしょうか。。。
どなたかご存知の方、ご教授下さい。

Dim inAF As Integer

If Sheet1.AutoFilterMode = True Then
  Sheet1.AutoFilterMode = False
  inAF = 1
End If

(ある処理)

If inAF = 1 Then Sheet1.AutoFilterMode = True

【44591】Re:オートフィルターを元に戻す
回答  飛ばない豚  - 06/11/22(水) 18:33 -

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

「AutoFilterMode」の(XL2002の)ヘルプより一部抜粋
>> ただし、このプロパティに True を設定することはできません。
>> フィルタをリストに適用したり、下向き矢印を表示するには、AutoFilter メソッドを使います。


ということで、
> If inAF = 1 Then Sheet1.AutoFilterMode = True
If inAF = 1 Then
  Worksheets("Sheet1").Range("A1").AutoFilter _
    field:=1, _
    VisibleDropDown:=True
End If
(シート名等は適宜変更してください)


それでは。(^・ω・^)

【44592】Re:オートフィルターを元に戻す
質問  けんけん  - 06/11/22(水) 18:59 -

引用なし
パスワード
   飛ばない豚さん

いつもご返信ありがとうございます!
オートフィルタを戻す所まではできました!

ですが、フィルタをかけた状態が
解除されてしまいました。。。
フィルタの状態を保持したまま戻すことも可能なのでしょうか。

ヘルプを見てみたのですが、そのような引数はなかったようなので。。。

【44609】Re:オートフィルターを元に戻す
発言  飛ばない豚  - 06/11/24(金) 10:21 -

引用なし
パスワード
   ▼けんけん さん:
> フィルタの状態を保持したまま戻すことも可能なのでしょうか。

ひとつ確認です。
フィルタの状態を保持したまま解除する事は
> If Sheet1.AutoFilterMode = True Then
>   Sheet1.AutoFilterMode = False
>   inAF = 1
> End If
これで出来ましたか?


私の環境では、フィルタの状態は解除されました。
なので、解除された状態で良いかと思ったのですが。。。。

【44610】Re:オートフィルターを元に戻す
発言  けんけん  - 06/11/24(金) 10:43 -

引用なし
パスワード
   飛ばない豚さん

ご返信ありがとうございます。

>ひとつ確認です。
>フィルタの状態を保持したまま解除する事は
>> If Sheet1.AutoFilterMode = True Then
>>   Sheet1.AutoFilterMode = False
>>   inAF = 1
>> End If
>これで出来ましたか?

上記のコードでフィルタの状態は解除できました!
で、ヘルプをその後探してみたところ、
フィルタを再設定する、といったようなコードがAutoFilter オブジェクトに
記載されていました。
それを活用して、以下とする事で、再設定することが出来ました。

〜〜〜以下コード〜〜〜

  Dim inAF As Integer
  Dim vaAF() As Variant
  Dim stAFRange As String

  With Thisworkbook.ActiveSheet
    '■■■オートフィルターの解除&退避■■■
    If .FilterMode = True Then
      inAF = 1
      stAFRange = .AutoFilter.Range.Address
      With .AutoFilter.Filters
        ReDim vaAF(1 To .Count, 1 To 3)
        For i = 1 To .Count
          With .Item(i)
            If .On Then
              vaAF(i, 1) = .Criteria1
              If .Operator Then
                vaAF(i, 2) = .Operator
                vaAF(i, 3) = .Criteria2
              End If
            End If
          End With
        Next
      End With
      .AutoFilterMode = False
    End If

    (中略)

    '■■■オートフィルターを戻す■■■
    If inAF = 1 Then
      For i = 1 To UBound(vaAF(), 1)
        If Not IsEmpty(vaAF(i, 1)) Then
          If vaAF(i, 2) Then
            .Range(stAFRange).AutoFilter _
              Field:=i, _
              Criteria1:=vaAF(i, 1), _
              Operator:=vaAF(i, 2), _
              Criteria2:=vaAF(i, 3)
          Else
            .Range(stAFRange).AutoFilter _
              Field:=i, _
              Criteria1:=vaAF(i, 1)
          End If
        End If
      Next
    End If
  End With

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