- 締切済み
Excel→オートフィルタ→すべてを表示
Excel 2003にて、データを入力して 特定のセルのみ、入力編集できるようにしたいため、 シート保護をかけており、オートフィルタで絞込みまではできるようになったのですが いくつかの項目で絞込みをすると、その分、順番にすべてを表示をクリックしないと いけないので、手間がかかります。また、シート保護をかけているので、メニューバーの すべてを表示は選択できません。 そこで、オートシェイプで、すべてを表示のボタンをマクロ、で作成しようと試したんですが エラーが出たりで上手くいきません。 上記の状況で、ワンクリックですべてを表示させる 正しい方法、何かいい方法をご存知の方、よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- cj_mover
- ベストアンサー率76% (292/381)
#1、2、3、cjです。 #1補足欄へのレスです。 > 上記のように入力してみましたが、エラーが出てしまいます。 #1に関しては、フィルターOffの状態で実行すると 実行時エラー ' 1004 Worksheet クラスの ShowAlldata メソッドが失敗しました。 というエラーになります。 (このこともあって、#2、3、で改善をしています。) それ以外で、どんなエラーが出るのか想像できなかったので、 実際にExcel2003環境をお借りして2時間ほどエラーを出すように テストしましたが、私にはエラーを出す方法が解りませんでした。 Excel2003よりも旧い環境で作成されたファイルで フィルターOnのまま保存されたものならば、特定の条件下で エラーを出すことは出来そうですが、試す環境がありません。 ただ、この場合は解決策として、 シート保護解除→オートフィルタを削除→保存→ブックを閉じる→再度開く オートフィルタを再設定→シート保護を再設定 という手順でトラブル回避できる筈です。 それ以外に、オートフィルターの破断した一時ファイルが Tempフォルダに残っている場合も考えられます。 その場合は、Tempフォルダを掃除すれば トラブルが解消される可能性は高いです。 他、私の経験的な知識と想像力が足りないだけで、 トラブルを抱えていないファイルでもエラーを出す 方法があるのかも知れませんが、 限られた情報から導けるものには限界があります。 /// > ... そして、 Sub すべて表示() On Error Resume Next ActiveSheet.ShowAllData End Sub のように入力すると実行できるんですが、 シート保護をかけると実行できません。 エラーはでないんですが。。。 < 今回の課題では、 On Error Resume Next は使わない方がいいです。 エラーを無視して次に進むだけですから、 無論エラーダイアログは表示されませんが、 エラーが出ていない、という意味ではありません。 /// さて、困りましたね。 そちらで、出来ること、を最後に書いておきます。 エラーになる原因が何であれ、 試しに、新しいブックを(ここで説明されている範囲の設定だけで)作成して、 エラーが出ない状況を確認して、 エラーが出るブックとエラーが出ないブックとで、何が違うか 原因を探ってみる、とか、ですかね。 もし、 こちらでもエラーを再現できる程度に情報が揃ったなら、 具体的な手当てをアドバイスできるだろうと思います。 または、 具体的にどの記述のどの部分でどんなエラーが発生するのか、解ったなら、 今よりは原因を推定できる可能性は高まります。 マクロで対応する、のが好いとは思いますが、 それを難しくしている原因が見当たらない、ということです。 ひとまず、何かお気づきのことでもあれば、また補足してみてください。
- cj_mover
- ベストアンサー率76% (292/381)
#1、2、cjです。 また改良しました。 差し替えでお願いします。 Sub Re8143367() On Error GoTo ErrHndl_ With ActiveSheet If .FilterMode Then .ShowAllData End With Exit Sub ErrHndl_: ActiveSheet.Protect Password:="", UserInterfaceOnly:=True, AllowFiltering:=True Resume End Sub 「シートの保護の適用からVBAによる処理を除外する」 のは、一度だけでいいので、 「シート保護によって.ShowAllDataがエラーになる場合」 だけ 「シートの保護の適用からVBAによる処理を除外」 するように書き換えました。 実用上は気づかない程度の変更で、解り難いかも知れませんが、 無駄が無い方が好いでしょう。
- cj_mover
- ベストアンサー率76% (292/381)
#1、cjです。 改良、というか、改善しました。 差し替えでお願いします。 Sub Re8143367() With ActiveSheet .Protect Password:="", UserInterfaceOnly:=True, AllowFiltering:=True If .FilterMode Then .ShowAllData End With End Sub #1で説明した、 シート保護のオプションを VBAのprotectメソッドにも適用させる 方法の例示にもなっています。 当然、オートフィルタを許可している筈ですから、 私の見落とし、でした。失礼。
- cj_mover
- ベストアンサー率76% (292/381)
こんにちは。 オートシェイプに登録するマクロの中身を 以下のようにすればできるでしょう。 Sub Re8143367() With ActiveSheet .Protect Password:="", UserInterfaceOnly:=True .ShowAllData End With End Sub 意味として シートの保護については、 直接手作業に対してのみ適用して、 vbaによる処理は許可するように変更して オートフィルタで非表示になっている部分をすべて表示 という流れです。 .Protect Password:="", UserInterfaceOnly:=True の、部分ですが、 パスワードを設定している場合は .Protect Password:="パスワード", UserInterfaceOnly:=True に書き換えてください。 (#ちょっと私Excel2003の細かい仕様を思い出せないのですが、 実際、フィルターも保護も仕様が変わっている分野なので、、、) 特別なことをしていなければ大丈夫でしょうけれど、 もし、うまく行かない時はVBA編集画面(VBE)で この部分 ↓ "Protect"にカーソルを当てて .Protect ...... F1キーを押すと表示されるVBAヘルプの解説から、 他に指定するべき引数がないか、 実際のシート保護のオプション設定に合わせるように 引数の指定を追加することになると思います。 以上です。
補足
度々、ご丁寧にありがとうございます。 上記のように入力してみましたが、エラーが出てしまいます。そして、 Sub すべて表示() On Error Resume Next ActiveSheet.ShowAllData End Sub のように入力すると実行できるんですが、 シート保護をかけると実行できません。 エラーはでないんですが。。。