• ベストアンサー

エクセルでシート移動時に保護したい

ここで教わりながら何とか出来そうなのですか、実際にやってみて最後に非常に重要かつ必要な機能がに気づいたので別の質問にさせていただきます。 シートに保護をかけておいて、編集時に保護解除と全シートをグループ化してから作業するようにマクロを作ったのですが、一旦保護を解除したシートに戻るとシートのグループ化が外れてしまっています。 回避策として、シート移動時に、作業したシートに保護がかかるか、アクティブシート以外には保護がかかるようなマクロを教えていただきたいのです。 宜しくお願いします。

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

  • ベストアンサー
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.3

こんなカンジでいかがでしょうか。 '//------------------------------------------------------------------ '// シート全数の保護を解除してグループ化 '//------------------------------------------------------------------ Sub SetGr()  Dim shCounter As Integer  Dim MyPassword As String    MyPassword = InputBox("パスワードを入力してください。", "Password")    With ThisWorkbook      .Sheets(1).Select 'グループ化されている場合に備え、いったん解除   For shCounter = 1 To .Sheets.Count    If .Sheets(shCounter).ProtectContents = True Then '保護されていたら     .Sheets(shCounter).Unprotect (MyPassword)    End If   Next shCounter      .Sheets(1).Select   For shCounter = 2 To .Sheets.Count  'グループ化    .Sheets(shCounter).Select Replace:=False   Next shCounter     End With End Sub '//------------------------------------------------------------------ '// Activeシートの保護を解除 '//------------------------------------------------------------------ Sub ActiveSheetUnLock() 'Activeシートの保護を解除  ThisWorkbook.ActiveSheet.Unprotect End Sub

akira0723
質問者

お礼

やっと何とか思うように動きましたが、何がどう悪かったのかチンプンカンプンでホンチャンのシートでの使用は今少し練習してからにします。 上の回答にはすでに、補足もお礼も枠を使ってしまっていますので、この回答で御礼申し上げます。 本当に、大変お世話になりました。

akira0723
質問者

補足

こんばんは。 誠にありがとうございます。 今自宅で上のコードをあれこれいじっていたら、(1)「保護の解除」→「全シートのグループ化」はマクロボタンでうまく動くようになりました。 ここで前回教えていただいた(1)「シート移動時の保護」の保護と、(2)クローズ時に最後に編集していたシート(アクティブシート)の保護を組み合わせたいのですが。 それぞれのマクロは単独では何とか動くことを確認したのですが(コピペなので)組み合わせる方法が分かりません。 本当におんぶにだっこ状態になってしまい情けない限りですが、ここまで来たので何とか完成させたいので、もう少し何とかお願いします。 本当に申し訳ありません。

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

その他の回答 (3)

  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.4

>それぞれのマクロは単独では何とか動くことを確認したのですが >(コピペなので)組み合わせる方法が分かりません。 どうしたいのか、どうのように困っているのかを読み取ることができないため、 コメントできません。

akira0723
質問者

お礼

何度も何度も申し訳なく。 やはり少しは自分で もがいてみないとだんだんお任せ質問(正解教えて)になっていますね。 最初にそこそこのマクロ(保護解除⇒全シート選択)がうまく動いたので、もう少しだと思いましたが、色んな条件が想定されていなくて・・ 手の空いた時に少し自分で試行した後に再度質問させて頂きますのでその時まで見放さずにお願い致します。 購入したままになってる「入門者のVBA」を読み始めましたので今しばらくお付き合いくださいませ。

akira0723
質問者

補足

非常に長文になってしまい申し訳ありません。 いくつかの分割質問の背景の詳細を書かせていただきます。 昨日まで他の仕事に追われて下記のお礼から手が付かずにいたので対応(お礼も)が遅れました。 今、自分の質問を読んだら何がしたいのか全く伝わらないことに気付きました。 何度も何度もなので別の質問を立てようかと思いましたが、よくよく考えたら色んなことがやりたいのではなく、1つのブックの中の数枚~20枚程度のシートの編集時には必ずグループ化してから編集するようにしたいだけです。集計時にブック内で行数が違うと非常にまずいので。 編集作業は不特定多数の人が色々なシートをいじりますのでグループ化が外れない様なブックであれば良いことに気付きました。 最初は編集開始時にマクロボタンで全シートの選択、を作ったのですが、全シートをグループ化すると、他のシートに移動するとグループ化が解除されることが分かり、ならばシートを移動すると自動でそのシートに保護がかかり、移動先のシートにはマクロボタンで保護解除とグループ化を仕掛けておいて、最後に編集したシートの保護はAUTO_CloseもしくはBefore Closeで出来る、と思っていたのですが、この3つの組合せを1つのブックに仕掛けようとトライするも当然あっけなくKOされてしまって、訳の分からない上記の質問となってしまいました。(ごめんなさい) さて、シートの保護、解除の方法を調べていたら、全シートを選択しなければシート間移動してもグループ化は解除されない、というのを知りました。 つまり最終シートにから1枚空のシートを追加しておいて、Sheet1~最終シートまでをグループ化して、ブックを保護しておけば何となくできそうな感じで問題解決? と思いきや、最終シートのタグを間違って触られたら即アウト、に気付きました。 詰まり、選択されている10枚のシートのグループ化がまちがって解除されない方法が有れば良いと思いついたので補足させていただきました。 最終sheetがいじれないように保護するか、見えないようにするか、が出来れば良いのですが。 如何でしょうか?  上記で当方の目的は達成出来ますでしょうか? 今度の質問は理解していただけるでしょうか?

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.2

添付画像のように、各シートごとのオブジェクトに それぞれ、 Private Sub Worksheet_Deactivate()  Me.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _   Password:="1234" End Sub を書き込めば、そのシートが非選択状態になる都度 保護することができます。

akira0723
質問者

お礼

早々の何度ものご対応有り難うございます。 出先ですので明日会社でためしみます。 結果を報告させたて頂きます。

akira0723
質問者

補足

毎度お世話になります。 ご回答の結果の報告ではなく、本来なら別の質問にすべきだと思うのですが、厚かましく。。。。。。 自宅でうまく行ったのに会社でうまく行かなくてシートの移動の前段階で止まってしまっています。 やりたいことは、10枚のシートに保護をかけておいて、編集時にマクロボタンを押すと保護解除(パスの要求)があってパスワードを入れると全シートが選択(グループ化)されて編集作業、別のシートへの移動時には作業していたシートが自動で保護される。 というのが最終目的ですが、最初の保護解除とグループ化でトラぶっています。 下記のコードはマクロの記録で作成しました。 これだとSheet2でマクロが動くとSheet1に移動していることが分かりました。 最後の>Sheets("Sheet1").Activate の"Sheet1"を"Sheet2"にしてもダメなようですし、Sheet2で別にマクロの記録を作成しても思うように動かないことが分ってお手上げ状態。 この状態でトラぶってしまったので、シート移動時の自動保護は殆ど試せていないのですが、先ず基本的に右上の窓の「worksheet」が(General)から変更できません。 これはマニュアル本で調べるにしても、最初のマクロが今一安定(動作理解)出来ていないので、先ずは報告まで。 下記コードの空白行にも意味があるようですね? 昨日のテストシートでは、保護解除した後、シートの全選択前でSTOPしたり??? 分らないことだらけになってきました。 Sub 保護解除とグループ化() ' ' 保護解除とグループ化 Macro ' ' ActiveSheet.Unprotect Sheets(Array("Sheet1", "Sheet2")).Select Sheets("Sheet1").Activate End Sub Sub 保護解除2() ' ' 保護解除2 Macro ' ' ActiveSheet.Unprotect Sheets(Array("Sheet1", "Sheet2")).Select Sheets("Sheet2").Activate End Sub

全文を見る
すると、全ての回答が全文表示されます。
  • HohoPapa
  • ベストアンサー率65% (454/692)
回答No.1

>編集時に保護解除と全シートをグループ化してから作業するように >マクロを作ったのですが どのように記述しているのかわかりませんが、  Sheets("Sheet2").Select  Sheets("Sheet2").Activate といったコードで、特定のシートを選択すると グループ化は外れます。 グループ化した直後、一番手前に表示するシートを指定したいのであれば、 グループ化するときに課題シートを最初に指定することで、 期待の挙動になると思います。

akira0723
質問者

補足

早々のお回答に感謝です。 既にお分かりだと思いますが、当方マクロ初心者でご回答の内容がよく理解できません。 例えば10枚(10人分)の共通書式のシートがあるのですが、これの編集時にすべての他のシートにもその編集内容を反映させるために、作業前に「全てのシートを選択」でグループ化してから作業するようにしました。 具体的には、各シートを保護しておいて、保護解除と全シートの選択をマクロ化して、作業前に「編集開始」ボタンをクリックすることで全シートがグループ化されてからの編集作業となるのですが、実際にはシートを行ったり来たりしながら作業する場合もあるので、あるシートの作業後、別のシートを編集し、再度一度編集したシートに戻るとそのシートのみの編集になってしまうことに気づきました。 そこで、別のシートに移動した場合、それまで作業していたシートに自動で保護をかけるのが目的なのですが。 最初の質問内容が明確でなかったためであればご容赦!! お手数をおかけしますがよろしくお願いいたします。 もし、ご回答が上記の内容に沿うものであれば、お手数ですが今少し詳細に教えていただければありがたいのでですが。

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

関連するQ&A

  • Excel シートの保護機能について

    Excel2003を使用しています。 シートの保護機能について、教えてください。 ユーザによるセル内の入力・編集・削除の作業は許可させたいのですが、 行の追加・削除は許可させないようにしたいと思っています。 「ツール」の「保護」機能を利用すると、行の追加・削除の制御は出来るのですが、 セル内への入力・編集もできなくなってしまいました。 制御できないことはないと思うのですが、可能でしょうか? マクロで作成したExcelファイルがあり、定形の形から崩れてしまうとプログラムが おかしくなってしまう為、上記のような制御を行いたいと思っております。 ユーザには、入力・編集作業+マクロの実行のみ、行わせたいと思っています。 よろしくお願いいたします。

  • エクセル2010のシート保護マクロについて

    すべてのシートを保護してくれるマクロを教えてほしいのですが、機能として 「ロックされていないセル範囲の選択」と「セルの書式設定」の二つの機能を許可したものを教えてください。また、逆にすべてのシートの保護を解除するマクロもお願いします。 エクセル初心者のため、見当はずれなことを聞いていたら申し訳ありませんが、いくら探しても上記のようなものを探すことができず、、、。シートが80ほどあるもので、困り果てています。 よろしくお願いします。

  • エクセルでシートのグループ化の状態を保護したい

    当方の思慮不足で、何度も同じような質問しており申し訳ないのですが,エクセル2010でシートをグループ化して作業する必要が有るのですが、不特定多数の人が編集するのでグループ化が外れないようにしたいのですが何か良い方法はないでしょうか? シートを「全シート」ではなく、選択してグループ化すると、他のシートに移動してもグループ化が外れないことが分かったので、空のシートを追加して必要なシートを選択して、ブックに保護をかけて、空のダミーシートをクリックできないように保護出来れば良いのですが。 ダミーシートの非表示を試してみたのですが、この方法ではできないことが分かりました。 何か良い方法は無いでしょうか?

  • エクセルのシート保護について

    こんにちは エクセルでシートが複数あります。 普段はいじらないように保護をかけてあります。(パスワードは設定していません) 同時に編集をしたいので、シートの保護を解除したり設定したりをしたいのですが、複数のシートを同時に設定・解除できる方法はありますか? 普通にシートを複数選んでも保護をいじることができないのですが、何かいい方法があったら教えてください。

  • Excelシートの保護について教えて下さい

    EXCELのシートの保護機能(パスワード付き)をセキュリティ目的で使用しています。 ・出来上がった資料を加工させない ・使用している関数を表示させない設定にし保護をかけて  操作が出来ないようにしている。 ・同一シート上にあるデータをグループ化し見えないようにしている。 etc・・・ とこるがこのデータをコピーした場合は保護がかかってますが 同一データ上でワークシートを作成しコピペすると保護が解除されてしまって全て見えるようになってしまいます。 何か良い方法はあるのでしょうか。 お手数かけます。 宜しくお願い致します。

  • エクセル マクロ コピー→シート保護解除→貼付

    いつもお世話になっております。 マクロ勉強中の者です。 2つの別ブックのシート(互いに任意)を同時に開いている前提での作業です。 (1)あるブックのシート(任意)は,シート保護が施されています。このシートのシート保護の解除をします。 (2)(1)で示したブックとは別のブックのシート(任意)に,次のようなマクロを設定してあり,指定した範囲のコピーを行います。 Sub コピー() コピー Macro Range("E6:AI73").Select Selection.copy End Sub (3)次に,(1)で示したブックのシート(任意)に次のようなマクロを設定してあり,先ほどコピーした内容を貼り付けます。 Sub 貼り付け() Range("E6").Select ActiveSheet.Paste  ActiveSheet.Protect End Sub (4)(1)で示したシートには,(2)で行ったコピーの内容を貼り付け,シート保護された状態で作業が終わります。 この一連の作業の中で,(1)の作業を省けないかと考えています。つまり, 別ブックのシートを2枚開いている状態で, ◎あるブックのシートの内容をコピー(範囲指定あり) →◎別のブックのシートに,シート保護解除して(2)でコピーした内容を貼り付け,(セル指定あり)シート保護して終了 (3)で示したマクロに ActiveSheet.Unprotect を付け加えて実行してみたのですが,うまくいきません。エクセルの性格上,「貼り付け」の前にシート保護解除の動作が入ることで,コピーした内容が失われ?て貼り付けることができないのかな?と感じているのですが,どなたかご教授いただけると嬉しいです。 エクセルのバージョンは,2016になります。

  • シート保護のパスワードは・・・

    下の「シート保護」マクロは、パスワード「111」でシートを保護しなさい。    「シート保護解除」マクロは、パスワード「111」でシートの保護解除をしなさい。 という命令だと思うのですが・・・ Sub シート保護()   ActiveSheet.Protect possword = "111" End Sub Sub シート保護解除()   ActiveSheet.Unprotect possword = "111" End Sub パスワードを入力してシートの保護を解除しようとすると、 入力したパスワードは間違っています。 CapsLockキーがオフになっていることを確認し、 大文字と小文字が正しく使われていることを確認してください。 というメッセージが出るのですが・・・、 マクロで作成した保護は、マクロで解除しないとダメという意味なのですか? シートで保護解除できるようにしたいのですが、できますか?

  • エクセルのシートの保護と解除

    excel2010です。 1月から12月までシートを作り、年間合計を出していますが、各シートに保護をかけています。ただ、それを解除し、編集するとき、各シートごとに解除をし、その後、再び、各シートごとに保護をかけなおしています。13枚いちいち解除、保護をかけなおすのは大変なので、同時に全部のシートの解除、保護をしたいのですが方法を教えてください。 また、現在、シートが出る下の行がコマンドになっていて、各シートが出てきません。どうすればシート1、シート2などが出てくるようになるのでしょうか? よろしくお願いいたします。

  • エクセル/保護したシート上の埋め込み

    EXCELの埋め込みFORM、COMBOBOXを作成して 図面の文字を変更する機能を作りました。 シーt解除で問題なく作動します。 シートの保護を掛けると シートの保護を解除してくれとメッセージされます。 この埋め込みフォームを使用して シートが触って崩れないように保護したいのですが どなたか教えていたませんか?

  • エクセル/保護したシート上の埋め込み

    EXCELの埋め込みFORM、Activex COMBOBOXを作成して 図面の文字を変更する機能を作りました。 シーt解除で問題なく作動します。 シートの保護を掛けると シートの保護を解除してくれとメッセージされます。 この埋め込みフォームを使用して シートが触って崩れないように保護したいのですが どなたか教えていたませんか?

専門家に質問してみよう