重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【6/2終了】教えて!gooアプリ版

写真1の【表1】では、列A~Jまでデータタブの"フィルター"をしてあります。
開発タブの"挿入"をクリックし、
フォームコントロールの"ボタン"を選んで記録を選択し、左クリックでボタンの範囲を指定し、
記録が開始されたら、登録したい操作である、
黄色セルのフィルター3カ所にチェックを入れる(①~③)
 ①発注数フィルターの"(空白セル)"のチェックを外す
 ②部品状況フィルターの"保留中""見積のみ"のチェックを外す
 ③発注伝票Noフィルターの"(空白セル)"のみチェックを入れる
"記録終了"をクリックし登録を終わらせる。
以上です。

※写真1の表2の様にピンクのセル、
部品状況"未発注"のみボタン1つで
表示させたいです。

"ボタン"でやりたい事は①~③のフィルター操作だけです。

校閲タブの"シートの保護"をしていない時はボタンの動作は正常に動きますが、

校閲タブの"シートの保護"をした場合は"実行時エラー '1004' "
となり、実行出来ません。

解決方法(VBA等)を教えて下さい。
よろしくお願いします。

「エクセルでフォームコントロールのボタンに」の質問画像

質問者からの補足コメント

  • 写真2を追加補足。

    「エクセルでフォームコントロールのボタンに」の補足画像1
      補足日時:2021/01/21 15:09
  • 有難うございます
    (補足1)
    Sub 黄色フィルター()
    '
    ' 黄色フィルター Macro
    '
    ActiveSheet.Unprotect Password:="999"
    '
    ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=5, Criteria1:="<>"
    ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=10, Criteria1:="=発注済み", _
    Operator:=xlOr, Criteria2:="=未発注"
    ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=9, Criteria1:="="
    ActiveSheet.Protect Password:="999"
    End Sub

    No.1の回答に寄せられた補足コメントです。 補足日時:2021/01/22 10:54
  • 有り難うございました。
    (補足2)
    (補足1)の様にしたらほぼ成功しました。
    ですが、最後の"シートの保護"をVBAですると
    画像の【表3】の様になり"オートフィルター"のチェックが自動で外れていて
    以降、フィルターの操作が出来なくなってしまいます。
    これを解決しないと使えません。
    どうか宜しくお願いします。

    「エクセルでフォームコントロールのボタンに」の補足画像3
      補足日時:2021/01/22 10:59
  • HAPPY

    解決1-1
    Sub 黄色フィルタ()
    '
    ' 黄色フィルタ Macro
    '
    ActiveSheet.Unprotect Password:="999"
    '
    ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=5, Criteria1:="<>"
    ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=10, Criteria1:="<>保留中", _
    Operator:=xlAnd, Criteria2:="<>見積のみ"
    ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=9, Criteria1:="="
    ActiveSheet.Unprotect Password:="999"

    No.3の回答に寄せられた補足コメントです。 補足日時:2021/01/23 14:42
  • HAPPY

    解決1-2
    ActiveSheet.Protect Password:="999", Contents:=True, Scenarios:= _
    False, AllowFiltering:=True, AllowUsingPivotTables:=True
    End Sub

    これで、解決しました。
    Qchan1962さんのおかげで解決にたどり着きました。
    エクセル初心者の方なので、助かりました。
    Qchan1962さん、本当にありがとうがざいました。

      補足日時:2021/01/23 14:53

A 回答 (3件)

#1です。


>」画像の【表3】の様になり"オートフィルター"のチェックが自動で外れていて以降、フィルターの操作が出来なくなってしまいます。
これを解決しないと使えません。

#1流れで回答します。
マクロの記録を使用して保護を設定してみてください。
パスワードは記録できないかも知れませんが、オートフィルターの使用する場合のコードが記録されます。
ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:= True, AllowFiltering:=True

とは言っても、判りにくいかも知れませんね。
Excelの Protect メソッドには、パラメータなるものがいくつかあります。このパラメータを設定する事で写真のダイアログのチェックボタン操作と同じことが出来ます。
MSのリファレンスです。
https://docs.microsoft.com/ja-jp/office/vba/api/ …

補足1のプロシージャに書き加えると
Sub 黄色フィルター()
'
' 黄色フィルター Macro
'
ActiveSheet.Unprotect Password:="999"
'
ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=5, Criteria1:="<>"
ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=10, Criteria1:="=発注済み", _
Operator:=xlOr, Criteria2:="=未発注"
ActiveSheet.Range("$A$2:$J$17").AutoFilter Field:=9, Criteria1:="="
ActiveSheet.Protect Password:="999", AllowFiltering:=True
End Sub
この回答への補足あり
    • good
    • 0

Worksheet.Protect メソッドのUserInterfaceOnlyプロパティにTrue を指定すると、画面上からの変更は保護されますが、マクロからの変更は保護されなくなります。


たぶん、こんな感じで。

ActiveSheet.Protect UserInterfaceOnly:=True


それから、シートに保護をかける際に、許可する操作として「オートフィルタの使用」にチェックを入れても行けるかもしれない。
    • good
    • 0

こんにちは、


シート保護を解いて実行
終了後 シート保護を掛けるやり方で、、下記のようにします。

ボタンを右クリック  マクロの登録をクリック ダイアログの編集を押す
該当のVBAコードが現れたら、
ActiveSheet.Unprotect 
ActiveSheet.Protect
を追加


Sub ボタン1_Click()
'
' ボタン1_Click Macro
'
ActiveSheet.Unprotect

記録されたマクロ

ActiveSheet.Protect
End Sub

なおパスワードが設定してある場合は、
ActiveSheet.Unprotectに追加して
スペースを空け Password:="設定されているパスワード"

ActiveSheet.Unprotect Password:="パスワード"
ActiveSheet.Protect Password:="パスワード"

とします。
この回答への補足あり
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!