• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:EXCELVBA 複数シートパスワード設定解除)

EXCELVBA 複数シートパスワード設定解除

このQ&Aのポイント
  • Excel VBAで複数シートのパスワードを解除し、処理を行う方法について教えてください。
  • 複数の氏名に対応したシートが含まれるExcelブックで、一番左のシートから順にパスワードを解除し、処理を実行した後、再度パスワードを設定して次のシートに移る方法について教えてください。
  • ただし、特定のシートには処理をスキップしたい場合もあります。*集計*という名称のシートが存在する場合は、処理をスキップする方法についても教えてください。

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

 失礼しました。先程のVBAには End Ifが抜けておりました。 Sub QNo9101090_EXCELVBA_複数シートパスワード設定解除() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If Not ws.Name Like "*集計*" Then ws.Unprotect Password:="AAAA" '(途中でやりたい処理) ws.Protect Password:="AAAA", _ DrawingObjects:=True, _ Contents:=True, _ Scenarios:=True End If Next ws End Sub

yakkun2338
質問者

お礼

kagakusukiさん、ご連絡ありがとうございます! ご教授いただきました方法で実現できました! 助かりました。 この度は本当にありがとうございました!

すると、全ての回答が全文表示されます。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17070)
回答No.4

ありふれた質問だとおもう。 >どなたかご教授いただけませんでしょうか、というレベルの質問では、ない。 ーー 下記のようなWEB照会で調べて、判らなければ、その後に質問すべきであろう。 Googleででも「エクセルVBA 全シート処理」や「エクセルVBA 順次 シート処理」などを照会すればよい。多数の記事が出る(よくある場合ということ)。 VBAをやるならまずWEB照会をする習慣を付けること。 本件は 「http://www.asahi-net.or.jp/~zn3y-ngi/YNxv9c48.html などの記事を見るとわかる。 (1)For Each 法 または (2)Forループ ーー (1)は回答ですでに出ている。 (2)は Sub test02() For i = 1 To Worksheets.Count Set ws = Worksheets(i) MsgBox ws.Name If Not ws.Name Like "*集計*" Then ws.Unprotect Password:="AAAA" '(途中でやりたい処理のコード記述) MsgBox "処理完了" ws.Protect Password:="AAAA", _ DrawingObjects:=True, _ Contents:=True, _ Scenarios:=True End If Next End Sub ーーー 質問に都合のよいことに、シート名のタブの見えている順に処理してくれる。 >右隣のシートに映って同じ処・・ この必要は本当はないのではないか?質問者がFor Each やFor ループなどのことを知っていれば質問文にこれを入れないのでは? 元のシートタブの順序のままでよいのでしょう? ーー >この中に田中、鈴木、高橋と氏名のシート複数・・ シート名に、名前の付い(含んだ)たシートだけを対象にするのは、一般には不可能。 10-20氏名なら配列にでも、それらの名前データを持っておいて Sub test04() varArray = Array("安田", "木村", "井上", "佐藤") '検索要素を指定 strTarget = "近藤" 'Filter()関数により要素を検索 varResult = Filter(varArray, strTarget) '戻り値配列のサイズで要素の有無を判定 If UBound(varResult) <> -1 Then MsgBox strTarget & "は配列内に存在する" Else MsgBox strTarget & "は配列内に存在しない" End If End Sub でもつかえばできそう。 他にDictionaryとExistsいうのを使う方法もある。 ーー 保護・保護解除の関係は あと「VBA シート保護解除」で照会して パスワードで解除するコードを調べればよい。 シートの保護 http://www.officepro.jp/excelvba/sheet_ope/index2.html セルの保護 http://www.moug.net/tech/exvba/0050079.html

yakkun2338
質問者

お礼

imogasiさん、ご連絡ありがとうございます! そうですね。まったく仰る通りだと思います。 私の力が未熟で、というよりも皆様への甘えですね。。 答えをすぐにほしがる甘えなのかもしれません。 この度はいろいろとご指摘いただきまして誠にありがとうございました。

すると、全ての回答が全文表示されます。
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>処理後にまたパスワードを設定 との事ですが、シートの保護と言っても様々な設定があります。  パスワード以外の設定を、どの様な設定とした保護をかければ良いのでしょうか?  例えば「シートの表示」、「ロックされたセル範囲の選択」、「ロックされていないセル範囲の選択」に関しては許可する設定となる保護をかける場合には、以下の様なVBAとなります。 Sub QNo9101090_EXCELVBA_複数シートパスワード設定解除() Dim ws As Worksheet For Each ws In ThisWorkbook.Worksheets If Not ws.Name Like "*集計*" Then ws.Unprotect Password:="AAAA" '(途中でやりたい処理) ws.Protect Password:="AAAA", _ DrawingObjects:=True, _ Contents:=True, _ Scenarios:=True Next ws End Sub

すると、全ての回答が全文表示されます。
回答No.1

※変数宣言は省略しています。 Sub test() For Each sht In ActiveWorkbook.Sheets If sht.Name <> "集計" Then ActiveSheet.Unprotect Password:="aaaa" '処理 Cells(1, 1) = 1 ActiveSheet.Protect Password:="aaaa" End If Next End Sub

yakkun2338
質問者

お礼

tanakanonoさん、ご連絡ありがとうございます! ご教授いただきました方法で実現できました! この度は本当にありがとうございました!

すると、全ての回答が全文表示されます。

関連するQ&A