[[20220119185100]] 『保護されたセルのあるシートをVBAでコピーしたい=x(バガボンド) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『保護されたセルのあるシートをVBAでコピーしたい(初心者)』(バガボンド)

初めて質問させていただきます。

VBAにてその月の日数だけワークシート作成し、日々の売上表のようなものを作成しています。

例えば、2022年1月であれば、1月1日のワークシートをコピー元に1月31日までのワークシートを作成しています。
コピー元のワークシートには、数式が変更されないようにセルに保護をかけているので、そのままでは、このシートのコピーができません。
一旦保護を解除してコピーすると、今度はコピーして作成した1月2日以降のシートのセルに保護がかかっていません。
そこで、お聞きしたいのですが、
1.コピー元のセルを保護したまま、同様のワークシートを作成することはできますか?
2.もしくは、あたらしく作成した日数分のワークシートの同様のセルに自動で保護をかけることはできますか?

1,2 ともに無理であるとすると、やはり、新しいワークシートを作成した都度、各セルを個別に特定し、保護をかけていくのでしょうか?

ご教授いただけると幸いです。

< 使用 Excel:Excel2019、使用 OS:Windows10 >


 マクロからは全ての操作を使用できるという便利な保護がありますよ

 UserInterfaceOnly:=True 左記を検索で調べてみてください
(あみな) 2022/01/19(水) 19:49

ご回答ありがとうございます。

UserInterfaceOnly:=True にて、コピー元のセルに保護がかっているにも関わらず、
日数分のワークシートをコピーすることはできました。
しかしながら、コピーされた30日分のワークシートの数式のセルには保護がかかっておりません。

調べてみますと、ワークシート上で計算式の入っているセルを自動的に保護できるというくだりが見つかりました。

Sub 数式保護()
 ActiveSheet.Unprotect
 Cells.Locked = False
 ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas).Locked = True
 ActiveSheet.Protect
End Sub

各ワークシートをコピー直後に、上記のような保護をFor文の中に組み込めばループを抜けた後にすべてのワークシートの計算式が入っているセルに保護がかかっているという状態になると考えているのですが、いかがでしょうか?
(バガボンド) 2022/01/19(水) 20:42


 >調べてみますと、ワークシート上で計算式の入っているセルを自動的に保護できるというくだりが見つ 
 かりました

 そうなんですね。う〜ん^^; そこまで困窮して調べたことが無いのですぐに良い回答は
 できませんが...そのWEBのURLを良かったら教えてください。

(あみな) 2022/01/19(水) 22:31


 シード保護してても、シートコピーはできます。

 保護されたシートのロックされてるセル範囲はコピーできないですね

 シートの保護を外せば、ロックされてるセルもコピーできます。
  (セルのロックは既定値でロックですが、普通にコピーできてますよね)
 なので、セルのロックプロパティをOn/Offする必要性はないはずです

 質問からは、シートコピーなのかセル範囲のコピーなのか判断できないので、
 今のコードを書き込んで回答者の皆さんに見てもらったほうが早く解決すると思います。
(´・ω・`) 2022/01/19(水) 23:00

 Sheet1のコピーを、最後尾に新しいワークシートを1枚挿入するサンプルですが
 新規のシートにも保護はかかるので、こんなイメージでどうでしょうか?

 Sub Sample()
    Dim ws As Worksheet
    Worksheets("Sheet1").Copy After:=Worksheets(Worksheets.Count)
    For Each ws In Worksheets
        ws.Protect Password:="1111", _
        UserInterfaceOnly:=True, AllowFormattingCells:=True
    Next
 End Sub

(あみな) 2022/01/19(水) 23:36


両者の方、ご返答ありがとうございます。
意図するように質問するのも難しいですね。

ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas).Locked = True
にて初日のワークシートを元に作成した30日分のワークシートの各セルにも保護をかけることができました。

ちなみにやりたかったことをもう一度整理してみますと、
1. 2022年1月ですと、"2022年1月1日"というワークシートを手動で作成します。
このワークシートの中には10個ほどのセル内に削除されては困る計算式が点在します。

2. 2022年1月2日から2022年1月31日までを"2022年1月1日"のワークシートをコピー元として
VBAにて自動で30個、日付を変えながら”2022年1月2日”、”2022年1月3日”..."2022年1月31日"というシートを作成していきます。

3.この日付分、新しく作成された各シート上でも先ほどの10個の点在するセルを保護する必要があります。

以上のように新しいワークシートをコピーするたびに、そのシート内のすべてのセルを調べ、セル内に数式があれば、保護したかったのです。

ご助言ありがとうございました!!

(バガボンド) 2022/01/20(木) 00:23


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.