質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

解決済

2回答

13175閲覧

【VBA】オートフィルター使用時の絞込み解除について

Nah_Y

総合スコア5

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

0クリップ

投稿2020/04/27 05:59

編集2020/04/28 05:50

前提・実現したいこと

エクセルVBAにてオートフィルターを使用して絞込みをし、
その絞込み結果が何もないときに、
絞込みを解除するとエラーが表示される。
別のmacroでfilter設定した結果

発生している問題・エラーメッセージ

実行時エラー'1004': WorksheetクラスのShowAllDataメソッドが失敗しました。

該当のソースコード

VBA

1 If ActiveSheet.FilterMode = True Then 2 ActiveSheet.ShowAllData 3 End If

試したこと

絞込みデータがある場合は、
上記コードで問題なく絞り込み解除ができている。
絞り込みデータが無い場合のみ
ShowAllDataを使用するとエラーが発生する。

この状態で絞込みを解除するには、
ActiveSheet.AutoFilterMode = False
で一度オートフィルター自体を解除してから
再度オートフィルターを設定するしかないのでしょうか?

補足情報(FW/ツールのバージョンなど)

MicrosoftOfficeProfessionalPlus2010
MicrosoftVisualBasic for Applications 7.0

<追記>

絞込みデータなしでの絞り込み状態のデータ
xlsmファイルのzip圧縮ファイルとなります。
この状態で【ボタン1】を押すとエラーが発生します。
Download
※削除予定

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

やはり、
ActiveSheet.AutoFilterMode = False
しか手立てはなさそうですか。。。
原因は絞り込み数が0の状態で、ShowAllDataを使用している事だと認識しています。
画像のような絞込み0でもFilterModeでチェックしますとTrueが返ってきます。

んと。
1)状況が再現できません。まずは、再現できるサンプル等をお願いします。

2)ActiveSheet.AutoFilterMode = False
ではだめですか?
他にもいろいろエラーの回避方法はありますが、
やりたいこと及び前提条件(コードを実行する前にシート上ではどうなっているか)、
全体の処理の流れ及び、上手くいってないコード(できれば全部、長ければ一部)を提示してください。


下記のようなmacroを作成しており、
Criteria1 の値を変更したものを、
複数配置しているような形です。
新規シートでフィルター設定した後、
下記macroを何度か起動すれば再現されます。

Sub filter()
If ActiveSheet.FilterMode = True Then
ActiveSheet.ShowAllData
End If
Range("A1").AutoFilter field:=1, Criteria1:=1
End Sub

20回実行してみましたがエラーになりません。
シート上のイメージを質問文に追記してください。

あと、
フィルターが掛かった状態は、いつも保持しなければいけませんか?
ActiveSheet.AutoFilterMode = False
とするのは何がまずいのでしょうか?

いくつかエラーを回避する方法はあると思いますが、
全体の流れがわからないので、
この件の場合どうしたらいいかの提案ができません。

投稿2020/04/28 01:47

編集2020/04/28 03:44
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nah_Y

2020/04/28 02:44

下記のようなmacroを作成しており、 Criteria1 の値を変更したものを、 複数配置しているような形です。 新規シートでフィルター設定した後、 下記macroを何度か起動すれば再現されます。 Sub filter() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If Range("A1").AutoFilter field:=1, Criteria1:=1 End Sub
退会済みユーザー

退会済みユーザー

2020/04/28 03:09

エクセルVBAにてオートフィルターを使用して絞込みをすると、 該当しない結果はチェックがない状態で表示されると思うのですが はじめにお示しいただいた空っぽの画面を再現できません。 (すべて選択の行だけが表示される) マクロも試しましたがエラーとなりませんでした・・。 やはり、サンプルか簡単な画面キャプチャがないと原因がわからないような 気がしてきました。
mattuwan

2020/04/28 03:44

解答欄に追記しました。
Nah_Y

2020/04/28 05:58

再現状態のファイルをDownloadできるように追記しました。 皆様再現しないということは、 当方の環境のせいかもしれませんね。
退会済みユーザー

退会済みユーザー

2020/04/28 06:17

拝見しました・・。勘違いなら申し訳ないのですが、 データがA列にないので、挙動としてただしいのではないかと。。 A列 name 田中 高橋 本田 にデータを入れるとマクロが正常に動作するような気がします。 Sub test() If ActiveSheet.FilterMode = True Then ActiveSheet.ShowAllData End If Range("A1").AutoFilter field:=1, Criteria1:="本田" End Sub
Nah_Y

2020/04/28 06:56

ご確認ありがとう御座いました。 不特定多数が使用するシートでしたので、 どんな動作をされても良いようにと考えておりました。 その上でShowAllDataでは動作しない環境を発見した為、 当サイトにて質問させて頂きました。 今後は、 ActiveSheet.AutoFilterMode = False を活用するか、 そもそもデータが無い状態では、 フィルターが動作しないような形で組むようにします。
guest

0

'オートフィルタを解除
Sheets("data").AutoFilterMode = False

ではだめでしょうか・・。

もしくは、原因追及が困難であれば、エラー処理するとか・・(そうではない?。。)。

sub test

on error goto err:

処理

exit sub

err:

msgbox "エラー!"

end sub

投稿2020/04/27 06:07

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Nah_Y

2020/04/27 06:22

やはり、 ActiveSheet.AutoFilterMode = False しか手立てはなさそうですか。。。 原因は絞り込み数が0の状態で、ShowAllDataを使用している事だと認識しています。 画像のような絞込み0でもFilterModeでチェックしますとTrueが返ってきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問