[[20250711145649]] 『オートフィルターの解除』(エクセル初心者) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) |

| 全文検索 | 過去ログ ]

 

『オートフィルターの解除』(エクセル初心者)

オートフィルターを解除するコマンドボタンを作ろうとしたのですが
上手くいきません
フィルターオプションのみを解除するには

Private Sub CommandButton1_Click()
'オートフィルターを解除し全表示
  If ActiveSheet.FilterMode = True Then
  ActiveSheet.ShowAllDate
End If

End Sub

のようにしたら良いと書いていたにですが
エラー438が出てしまいます。
オートフィルターも使用中(絞り込んでいる状態)のはずですが
何か抜けているのでしょうか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 Date と Data の違いか?
(白茶) 2025/07/11(金) 15:11:43

本当だw
初歩的なミスでした!
ありがとうございます!
(エクセル初心者) 2025/07/11(金) 15:16:22

 「オブジェクトは、このプロパティまたはメソッドをサポートしていません。」
 というエラーメッセージにはそれなりに意味があります。 
(xyz) 2025/07/11(金) 15:31:48

 (Tips)
 Private Sub CommandButton1_Click()
    Dim sh As Worksheet
    Set sh = ActiveSheet
    'オートフィルターを解除し全表示
    If sh.FilterMode = True Then
        sh.ShowAllData
    End If
 End Sub
 などと変数宣言しえおけば、sh. と打ったところで候補が出ます。
 sh.shなどともうすこし入力すれば候補にあたりますから、そこでTabキーを押すと確定します。
 こんな風に"インテリセンス"を活用することも間違いを減らす工夫です。
(xyz) 2025/07/11(金) 15:37:38

 (ついで)
 シートモジュールに書いているので、
 特に変数を宣言しなくても、自分自身のシートは Meキーワードで指すこともできます。
 Me. と書いたところで候補は出ます。あとは同じ。

 Private Sub CommandButton1_Click()
     If Me.FilterMode = True Then
         Me.ShowAllData
     End If
 End Sub
(xyz) 2025/07/11(金) 15:49:58

正解はひとつではないとは知っていましたが
色々方法があるんですね…

ありがとうございます!
(エクセル初心者) 2025/07/11(金) 17:03:57


横からですが、1点だけ。

前トピックで「なんでもかんでもエラーを飛ばすのはダメ」という指摘がありましたが、【適切なタイミングでエラーを無視する】ならば、それは有効なアプローチになりえます。
なので、↓のようにとりあえず実行しちゃうというのも可能ではあります。

 Private Sub CommandButton1_Click()
     On Error Resume Next
         Me.ShowAllData
     On Error GoTo 0
 End Sub

(もこな2 ) 2025/07/11(金) 23:22:01


ありがとうございます。
エラーを飛ばすコードは試しに使ったことはあるんですが、思った処理と違う結果になったので、以来使ってないですね。
適切なタイミングは自分にはまだ難しいようですw
(エクセル初心者) 2025/07/12(土) 15:50:54

インテリセンスの利用試してみましたか?
(xyz ) 2025/07/12(土) 16:17:30

If ActiveSheet.AutoFilterMode Then
   MsgBox "オートフィルタ状態"
   If ActiveSheet.AutoFilter.FilterMode Then    '←(注)2007以上 
      MsgBox "絞り込まれています"
      ActiveSheet.ShowAllData
   Else
      MsgBox "絞り込まれていません"
   End If
Else
   MsgBox "オートフィルタ状態ではない"
End If
(F1) 2025/07/12(土) 17:50:29

Private Sub CommandButton1_Click()
    With ActiveSheet
        ' 絞り込み状態(フィルターで非表示行がある)なら、全データを表示
        If .FilterMode = True Then
            .ShowAllData
        End If

        ' オートフィルター(▼)が設定されているなら、解除
        If .AutoFilterMode = True Then
            .AutoFilterMode = False
        End If
    End With
End Sub

(通りすがり) 2025/07/13(日) 10:50:46


お返事をいただいたので追加で何点か。

■1
>適切なタイミングは自分にはまだ難しいようですw
無理に使えっていう話ではなく、引き出しとして覚えておくとよいということです。
ちなみに、オートフィルタ自体を一回解除して再設定すれば同じことになるので

    Sub 別案1()
        With ActiveSheet
            .AutoFilterMode = False
            .Range("A1").AutoFilter
        End With
    End Sub
とか、

    Sub 別案2()
        Dim buf As String

        With ActiveSheet
            buf = .AutoFilter.Range.Address
            .AutoFilterMode = False
            .Range(buf).AutoFilter
        End With
    End Sub
のようなアプローチでも解決できそうに思います。
 前者は表範囲の左上の1つのセルを指定することでオートフィルタを設定しているのに対して
 後者は先にオートフィルタが設定されいるセル範囲を調べておいてから解除し、
 同範囲にオートフィルタを設定しています

■2
冒頭に「フィルターオプションのみを解除」とありますが、「オートフィルタの絞り込み解除」の話ですよね。
「フィルタオプション」は「オートフィルタ」と別の機能になるので、意識しておくと質問が伝わりやすいかもしれません。

(もこな2) 2025/07/13(日) 15:44:40


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.