• ベストアンサー

Excel2003でシート保護(オートフィルタ使用にはチェック)するとマクロのオートフィルタでエラーになる

QNo.3901563で回答いただき、Excelの試用で保護後のオートフィルタは使えないのはわかりました。 そこで予めオートフィルタを設定し、シートに保護をかけました。 Excelの画面上ではオートフィルタは使用できます。 マクロよりオートフィルタの抽出条件を変更するコマンドを実行すると「保護されたシートに対して、このコマンドは実行できません」と表示されます。コマンドは新しいマクロの記録で操作を記録したものです。記録したときは特にエラーはでませんでした。 Selection.AutoFilter Field:=2, Criteria1:="AAA" マクロのコマンドでは保護のかかったシートのオートフィルタの抽出条件を変更することは出来ないのでしょうか。 マクロの前後にシート保護を解除するコマンドを入れようかとも思ったのですが、保護にパスワードがかかっており、本末転倒となるもので。

  • youryi
  • お礼率84% (135/160)

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 '標準モジュールで、自動設定 Sub Auto_Open() Const PWS As String = "PS" 'パスワード  With Worksheets("Sheet2")   .Unprotect PWS   .Protect PWS, UserInterFaceOnly:=True   '以下をつければ、手動でもオートフィルタは使えます。   .EnableAutoFilter = True  End With End Sub '----------------------------------------------- UserInterFaceOnly:=True のオプションをつければ、マクロで処理できますし、また、EnableAutoFilter にすれば、保護された状態で、オートフィルタは使えます。 なお、オートフィルタは、こんな感じです。 Sub Test1() With Range("A1").CurrentRegion  .AutoFilter Field:=2, Criteria1:="aaa" End With End Sub

youryi
質問者

お礼

教えていただいた記述をブックを開くときに実行することでマクロが動くようになりました。 詳しく説明ありがとうございます。

その他の回答 (1)

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

マクロでも保護の掛かったシートの状態を操作できません。 対策としては、マクロの最初で保護を解除し、実行後に保護を掛けます。 別の方法としては、ブック起動後に保護されたシートに対して「マクロは有効」という呪文(コード)を1回だけ実行する方法もあります。

youryi
質問者

お礼

ありがとうございました。

関連するQ&A

  • マクロ オートフィルタで困っています。

    マクロ オートフィルタで困っています。 1列目と2列目からそれぞれ条件をフィルタで抽出し、抽出された行を削除するマクロを組んだのですが(下記)、Bの条件が表にない場合に2行目から下が全て削除されてしまいます。 元の表は毎週変わるため、抽出する条件があるかないかはその時次第です。 オートフィルタにこだわってはいませんが、その他の抽出方法もいまいち分からず……。 どのようにすればよいのか、教えていただけますでしょうか。 宜しくお願い致します。 <マクロ> Sub Macro() Selection.AutoFilter Field:=1, Criteria1:="A" Selection.AutoFilter Field:=2, Criteria1:="B", Operator:=xlAnd Dim gyou(1) As Long gyou(0) = 2 gyou(1) = Range("A1").CurrentRegion.Rows.Count Rows(gyou(0) & ":" & gyou(1)).Select Selection.Delete Shift:=xlUp End Sub

  • フィルタオプションとシートの保護

    Excel2003を使用して、あるシートに以下の設定を行なっています。 (1) 「入力規則」のドロップダウンリストからデータを選択入力する設定 (2) (1)で選択入力されたデータを抽出条件にしたフィルタオプションを設定(抽出先は指定した範囲) (3) 「マクロの記録」で(2)の作業を記録し、作成したマクロにボタンを作りボタンを押すと抽出を実行するよう設定 ※シート1に元データがあり、シート2が問題のシートになります。 このシートを保護し、他者に変更されないようにしたいのですが、保護をしていると抽出ができなくなってしまいます。 オートフィルタなら有効にする設定があるようですが、フィルタオプションは有効に出来ないのでしょうか? 他のシートを抽出先にせず、これらを実行したいのですが…。 何か良い方法があればご伝授願います。 尚、今回マクロを設定してはおりますが、実際に自分で記述して書くほどの知識はありません。 もしもマクロを使用しなければならない場合はお手数ですが、その詳細も教えて頂ければ幸いです。 宜しくお願い致します。

  • excel2000のオートフィルタマクロ

    マクロ記録の簡単な編集程度の知識しかありません。 C1に入っている文字列を、完全一致ではなく、”含む”状態でオートフィルタしたいのですが、 どの様に記述すればいいですか? 現状、下記のようになっています。 Selection.AutoFilter Field:=2, Criteria1:="C1", Operator:=xlAnd よろしくお願いいたします。

  • Excel2003でシート保護(オートフィルタ使用にはチェック)するとオートフィルタが使えない

    Excel2003を使用しています。 シートの保護でオートフィルタの使用にチェックを入れて保護をかけた後、データ - フィルタ - オートフィルタ が灰色に表示され、使用出来ません。 フィルタ設定 → シート保護だとオートフィルタを使用できます。 Excelの試用でオートフィルタの使用にチェックを入れて保護をかけても、保護後にはオートフィルタの設定は出来ないのでしょうか?

  • オートフィルターの使い方

    マクロでオートフィルタを使おうと思っているのです。 作成したリストの中で、日付でフィルタしようと思い 下記を作成してみましたがうまくいきません。 Worksheets("シート名").Range("A2").AutoFilter Field:=30, Criteria1:="<=2004/9/30", Operator:=xlAnd = 1, Criterial2:=">=2004/9/1" 条件と致しましては任意の期間(例:2004/9/1~2004/9/30)を抽出条件としたいのですが・・・ 又、セルには空白も存在します。 宜しくお願いいたします。

  • EXCEL2003のオートフィルターで、今日又は昨日をマクロで抽出した

    EXCEL2003のオートフィルターで、今日又は昨日をマクロで抽出したいのです。 2007の、日付フィルターに相当するものになります。 (1)http://q.hatena.ne.jp/1131101536 を参考にして、 Selection.AutoFilter Field:=1, Criteria1:="=" & Date, Operator:=xlAnd としましたが(A列に日付データが入っています)、実行すると「2010/05/28」で検索され抽出されません。 手打ちで「2010/05/28」を「2010/5/28」に変更すると抽出されました。 (2)使用していないH1セルへ「=today()」と入れ、  Criteria1: Range("H1") としましたが、シリアル値で検索されるためかやはり出ませんでした。元のデータはもちろんシリアル値なので、表示はyyyy/mm/ddに設定しています。 (3)次に  Criteria1:="=" & Range("H1") としましたが、(1)と同じ結果になってしまいました。 うまくフィルタリングするにはどうすればよいか教えてください。

  • オートフィルタで表示されるリスト全部をマクロで抽出したい

    マクロでオートフィルタで抽出する項目を idx = Split("A社,B社,C社,・・・・・", ",") として入力し、 .AutoFilter Field:=1, Criteria1:=str(idx) というように抽出し、新しいシートにコピーているのですが、 社名の追加や変更がよくあるので、 その場合、毎回マクロを訂正しなければなりません。 オートフィルタのドロップダウンリストに表示されるものを 1つずつ全て抽出して新しいシートにコピーする方法はないでしょうか? ご存知の方、どなたか教えてください。 よろしくお願いします。

  • EXCELのオートフィルターマクロについて

    初歩的な質問で恐縮です。 sheet1にデータ一覧を作成(仮にシート名を「データシート」とします)し、 sheet2へ検索条件を入力するセルとコマンドボタンを配置し、sheet1のデータを「オートフィルタで検索」するマクロを作成しました。 マクロの検証も行い動作の確認も行いマクロの実行してみると、ちゃんとフィルタ処理されており全て完璧!となりました。 ところが、他人への配布も予定していたので、データの改ざんを防止するため、データシートをシート保護して実行したところ、「ロックされているため実行できません」旨のエラーになってしまいました。 やはり、シートの保護を行なってしまうと、マクロであってもオートフィルタ機能は使用できないのでしょうか? 何か解決(保護状態でもオートフィルタ機能が使用可能)方法はありませんでしょうか? ご教授お願いいたします。

  • オートフィルタ 検索

    オートフィルタで三つの条件でデータを抽出するマクロを作っています 以下のような記述は誤りでしょうか? ActiveSheet.Range("$B$2:$D$114").AutoFilter Field:=1, Criteria1:="=02722*" _ , Operator:=xlOr, Criteria2:="=02729*" _ , Operator:=xlOr, Criteria3:="=02737*" 表はこのようなものです ↓キー 番号      名前      値 027**     **     * 027**     **     * 027**     **     * ・ ・ ・

  • マクロでオートフィルタを(すべて)に戻したい。

    エクセルで4月~3月の12sheetを作って、4月に次のような記録マクロを作りました。コマンドボタンを押して、オートフィルタであるデータを抽出して抽出というsheetにコピペし4月に戻って全て表示に戻すまでを作成しました。これを5月~3月にコピペしたのですが、抽出コピペまではできますが4月に戻ることになっているので、5月以降は全て表示に戻すことができません。全てのシートに適用させるには、それぞれ月毎に記録させないとできないでしょうか?

専門家に質問してみよう