• ベストアンサー

エクセルのセルの編集制限(保護)の仕方

いつもお世話になっております。 エクセル2016で、範囲を設定して、操作(並べ替え等)を指定して制限することができるのですが、入力するセルにはロックは当然かけらません。 しかし多人数で同じシートを使用する場合の保護として、データ入力後いったん保存したら、既存の入力セルの編集、上書きを禁止するような制限のかけ方はないのでしょうか?

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

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

1.明示的に保存しないと機能しない点 空欄のセルに値を埋め、右上の×で閉じ 促してくる画面で保存した場合、 値を埋めたセルが保護されない動きになっている ということと思います。 これについてはごめんなさい。 私に誤解がありました。 ソースコードの冒頭を 変更前 Private Sub Workbook_AfterSave(ByVal Success As Boolean) 変更後 Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) としてください。 2.シート保護に使うパスワードについて 保護はするものの、パスワードは設定しない。 という使い方をするのであれば、 変更前 Const MyPassword = "hoge" 'パスワード(省略可) 変更後 Const MyPassword = "" 'パスワード(省略可) としてください。 3.最初の仕込み 課題ブックを開き、マクロをコピペするわけですが 課題シートは、保護されていない状態にしてください。 シートを保護する作業はマクロが担いますから。 4.マクロの保護作業に無関係なセルたちについて >Const RowS = 16 'ロック範囲開始行 >Const RowE = 500 'ロック範囲終了行’ >Const ColS = 1 'ロック開始列 >Const ColE = 8 'ロック終了行 上記範囲外セルたちは、 手作業で、 シートの保護を解除し、 保護したい個所のセルはロック状態に、 保護したくない箇所のセルは非ロック状態にしてください。 その後、手作業であえてシートを保護する必要はありません。 シートを保護する作業はマクロが担いますから。

akira0723
質問者

お礼

助かりました。 保護をかけるのはできていたのですが、毎日作業する多数のファイルで入力時の解除はともかく、終了時の設定を忘れてしまうことが多く、たまたま設定忘れのファイルが見つかり改善要求があったものです。 これをマニュアルに残して当該事項は完了です。 当面は別の2つのファイルにも設定して、そのあとは多数ある他のBookにも随時展開することになります。 本当にありがとうございました。

akira0723
質問者

補足

お世話になります。 本当に何度もお手数をおかけします。 朝一で試してみたのですが、エラーメッセージがでて、デバックを見てみると下記の1行が黄色になり、やはりパスワード関連と思い、「Mypassuwod」を””に変えてみても・・・ .Unprotect Password:=MyPassword まで書いてふと従来の制限を解除していないことに気づき編集範囲の設定と保護設定を解除してみたらバッチリできました。 本当に何度もご丁寧なご指導に感謝!!!

その他の回答 (7)

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

>さて、時間ができたので早速下記をThisWorkbookにコピペしてみたのですが >全くなにも起こらず、 >従来かけていた1-15行目だけが保護されています。 マクロをコピペしただけでは、何も起きません。 いったん上書き保存して閉じ、 開きなおしてください。 Aさんが開くと、 マクロで指定したシート、指定したセル範囲の内、 その時に空欄だったセルだけが入力、変更、セル値の削除が可能です。 その後、Aさんが保存します。 Aさん、または、Bさんが再び開くと その時に空欄だったセルだけが入力、変更、セル値の削除が可能 (Aさんが新たに埋めたセルも保護された状態) という動作です。

akira0723
質問者

補足

何度もすいません。 原因がわかりました。が解決方がわかりません。 コード(行数、列数や従来保護の解除等)を何回か変えた時には毎回一旦閉じて、再度開いていたのですが、肝心の上書きをしていませんでした。 通常は何かいじると「変更を保存しますか?」と聞いてくるのでその時に「はい」で終了させているのですが、マクロの編集だけでは保存を聞いてこないので何事もなく終わって、開いただけでした。 ご指摘ではたと思い当って、上書きして見たらマクロのエラーメッセージが「パスワードが違っています」と出て来ました。 おそらくパスワードは「hoge]だと思うのですが、どこに入力するのかがわかりません。 また、出来ればパスワード不要のほうが良いのですが。 ところで、今までの保護と範囲許可の設定はどうしたらよいのでしょう? 解除不要でマクロ優先でしょうか? 当方のやりたいことは上記ご回答でぴったりで、何とかできそうな気がしますのでもう少しお付き合いお願いします。

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

VBAを使わない(使えない)のであれば、 >多人数で同じシートを使用する という皆さんがそれぞれ、 入力する都度、入力したセルをロックする必要があります。 保護の機能は既に使っているとのことですので、 マクロでは、あらかじめ指定した範囲について 期待の保護が動作するようにしてみました。 なお、マクロの配置先は、添付画像のとおり、 workbookです。 また、 ソースコードにシート保護のパスワードを書き込むことになりますので ソースコードを利用者が覗けないようにする必要があります。 よかったら挑戦し、わからなければ聞いてください。 Private Sub Workbook_AfterSave(ByVal Success As Boolean)  Const RowS = 1       'ロック範囲開始行  Const RowE = 7       'ロック範囲終了行’  Const ColS = 1       'ロック開始列  Const ColE = 8       'ロック終了行  Const MyPassword = "hoge"  'パスワード  Const MySheet = "Sheet1"  '保護したいシート名  Dim RowCnt As Long  Dim ColCnt As Long    With ThisWorkbook.Sheets(MySheet)   .Unprotect Password:=MyPassword   For RowCnt = RowS To RowE    For ColCnt = ColS To ColE     If .Cells(RowCnt, ColCnt).Value <> "" Then      .Cells(RowCnt, ColCnt).Locked = True     Else      .Cells(RowCnt, ColCnt).Locked = False     End If    Next ColCnt   Next RowCnt   .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _     Password:=MyPassword  End With End Sub

akira0723
質問者

お礼

HohoPapaさん お手数をお掛けしております。 さて、時間ができたので早速下記をThisWorkbookにコピペしてみたのですが全くなにも起こらず、従来かけていた1-15行目だけが保護されています。 入力範囲は16行目以降500行目まで、列はAからHまでの8列です。 パスワードも聞いてきませんでした。 保護したいシート名は「入力表」です。 上の左窓には「Workbook」右窓には「AfterSave]と表示されています。 おそらく基本的なところだと思うのですが、これが当方の実力ですので宜しくお願いいたします。 このマクロを使う場合、元の保護設定は全て外すのでしょうか? 一応従来設定していた、「シートの保護」の設定と「入力許可範囲」の設定は解除してみたのですが同じでしたが。。。 Private Sub Workbook_AfterSave(ByVal Success As Boolean) Const RowS = 16 'ロック範囲開始行 Const RowE = 500 'ロック範囲終了行’ Const ColS = 1 'ロック開始列 Const ColE = 8 'ロック終了行 Const MyPassword = "hoge" 'パスワード Const MySheet = "入力表" '保護したいシート名 Dim RowCnt As Long Dim ColCnt As Long With ThisWorkbook.Sheets(MySheet) .Unprotect Password:=MyPassword For RowCnt = RowS To RowE For ColCnt = ColS To ColE If .Cells(RowCnt, ColCnt).Value <> "" Then .Cells(RowCnt, ColCnt).Locked = True Else .Cells(RowCnt, ColCnt).Locked = False End If Next ColCnt Next RowCnt .Protect DrawingObjects:=True, Contents:=True, Scenarios:=True, _ Password:=MyPassword End With End Sub

akira0723
質問者

補足

いや~ご丁寧な回答痛み入ります。 必ずチャレンジしてみますが、今苦情対応で手が回らないので後日必ず試行し、結果報告(どうしても駄目そうならGive Up宣言)しますのでしばらく時間をください) おそらく再度の質問になると思います。 勝手ですがしばし時間をください。 先日顧客監査があり、入力場所以外(参照セルや計算式等)は保護がかけてあるが、既入力データ(入力範囲で保護されていないセル)の意図しない変更に対する対策を指摘されたものです。 つまり悪意のあるデータの改ざんの防止ではなく、ヒューマンエラーの防止が目的です。 よって必要時には他の人もいじれるようにパスワードも周知のものを使います。 他の顧客のデータ管理にも横展開できますので非常に助かります。

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

>多人数で同じシートを使用する >入力するまではフリーで、 >保存するとすべての入力セルが自動で保護されるような 値の埋まった、あるいは、埋めたセルは保護し 値の埋まっていないセルは非保護にしたい。 ということでね? VBAで実現するのであれば そのブックを保存する時(イベント)に ・シート保護を解除 ・値の埋まったセルは全数ロックし、 ・値の埋まっていないセルは全数ロックをオフに ・シート保護を設定 これらを行えば、期待の結果になりましょう。 そこでお聞きします。VBAは扱えますか?

akira0723
質問者

補足

マクロの記録で出来たコードを少しいじるか、ここで教えてもらってコピペして、それを試行錯誤してどうにか使えるようにさるレベルですので実質出来ません。

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

VBAですが、ブックのCLoseイベントに、シートを保護するコードを入れればすむのでは? Googleで「vba Closeイベント 」で照会のこと。 ーー シートを保護するコードがどうなるか?は Googleで「vba シートの保護 」で照会すれば簡単にわかるのでは? そこまでやって、思ったことと違うなら、その点に絞って、質問できると思う。 ーー  仕事(他人と共同で使う、使わせる)でエクセルを使うなどの場合は、VBAができないと、手も足も出ないのでは?

akira0723
質問者

お礼

早々のご回答ありがとうございます。 仰る通りだと思います。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.3

>データ入力後いったん保存したら、 >既存の入力セルの編集、上書きを禁止するような制限のかけ方 ----------------------------------------------------------------------------------- 全て自動ではないですが 作成したSheetに「シートの保護」を設定すると 全てのセルが変更できません 【校閲リボン】⇒【シートの保護】⇒【OK】 以上で全てが変更できなくなります。 「シートの保護」が「シート保護の解除」となります。 再度シートに修正を加えるにはこのをクリックします。 これなら修正は誰でも出来ますね ------------------------- 【校閲リボン】⇒【シートの保護】⇒【「パスワードを入力】⇒【OK】 とすると、パスワードを知らない人は「シート保護の解除」が出来んくなります。

akira0723
質問者

お礼

ご回答ありがとうございます。 ご回答の保護はすでに多用しており、今回は少し違った方法ですので質問させてもらいました。

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.2

校閲リボン下にシートの保護のツールがあります。 これをオンにすると全てのセルが入力できなくなります。 これは、全てのセルが保護になっているためです。 シートの保護を解除すると全てのセルが入力可になります ---------------------------------------------------------------- 入力するセルのセルの書式設定の保護タグ内のロックの (チェックボックス内の ✓)を外すと ここだけはシートの保護をかけても入力可です

akira0723
質問者

補足

早々のご回答ありがとうございます。 質問が言葉足らずでしたが、やりたいことは 入力するまではフリーで、保存するとすべての入力セルが自動で保護されるような制限のかけ方です。 >データ入力後いったん保存したら、既存の入力セルの編集、上書きを禁止するような制限のかけ方

回答No.1
akira0723
質問者

補足

早々のご回答ありがとうございます。 質問が言葉足らずでしたが、やりたいことは 入力するまではフリーで、保存するとすべての入力セルが自動で保護されるような制限のかけ方です。 目的は他の人が入力したセルに次の人が意図しない変更、上書きの防止です。 >データ入力後いったん保存したら、既存の入力セルの編集、上書きを禁止するような制限のかけ方・・・

関連するQ&A

  • EXCELで特定のセル以外を保護するのには?

    完成したブックの特定のセル(年と月を入れるとそのカレンダーが表示されるなどの場合年とか月を入れるセル)だけ入力できてそれ以外のセルは入力や編集や上書きが出来ないように保護をかけるにはどうしたらいいのでしょう? シートの保護にすると全部のセルが入力不可になりますし、データのチェックをはずすと全部のセルの入力編集上書きが出来てしまいます。 読み取り専用とか書き込み禁止のパスワードを設定しても上書き保存がされないというだけで、入力編集上書きが操作上できなくなるというわけではないのですよね? 上書き保存は出来てもOKなのですが、関数などが入ってるセルを誤って消したりしないように操作上特定のセルだけしか入力編集上書きができないようにするにはどうしたら一番よいのでしょうか? よい方法をご存知の方がいらしたら是非教えて下さいm(__)m

  • エクセルの1つのセルだけを保護したい

    エクセル2010でシートの保護と編集可能なセルの指定方法(セルのロックを外してシート全体を保護する)は知っているのですが、計算式の入った数個のセルだけを保護したいのですが。 一応、セルの書式設定で1つのセルだけロックを外して、シート全体を保護してみたのですが、この方法では駄目でした。 簡単に目的の(飛び飛び)のセルだけを保護する方法を教えてください。

  • EXCEL保護シートで、Σを使いたい。

    EXCEL2002のシートに保護をかけた時に、Σがグレーアウトして表示されません。 表示させるには、どのようにすればよいでしょうか? Σを入力するセルは、ロックをかけておらず、タテ(列)の合計を計算させます。 保護されたシートのすべてのユーザーに許可する操作は 「ロックされたセル範囲の選択」「ロックされていないセル範囲の選択」「セルの書式設定」「列の書式設定」「行の書式設定」「行の挿入」「行の削除」「並べ替え」にチェックをいれています。

  • 保護をかけたセルを並べ替えたい

    誤入力が無いようにシートに保護をかけました。 その状態でセルを並べ替える方法を教えてください。 「シートの保護」から「このシートのすべてのユーザーに許可する操作」で「並べ替え」にチェックを入れたのですが、「変更しようとしているセルまたはグラフは保護されているため、読み取り専用になっています。」とアラートが出て並び替えをすることができません。 何か用方法はありませんでしょうか。 よろしくお願いします。

  • Excel - シート保護と並べ替え

    シート保護をかけたExcelのブックで、並べ替えだけは行いたいのですが、保護の時点で「並べ替え」の許可にチェックを入れても、「読み取り専用です」の旨のポップアップが表示され、並べ替えができません。 セルの書式設定で「ロック」のチェックを外せば並べ替えはできましたが、これだと編集も可能となるので、シート保護の意味がありません。 シート保護をかけた状態で、並べ替えだけ可能となるような設定の組み合わせが、他にありますでしょうか。 宜しくお願いいたします。

  • エクセル_特定範囲のセルの入力制限

    エクセルについて教えてください。 範囲指定したセルのパターンや罫線の変更はOKだが、削除・編集はできないようにする(削除・編集しようとすると禁止のメッセージが出る) という規則を付けたいのですが、シートの保護、マクロ等いろいろ試しましたがうまくいきません。 『ロック解除&シートの保護』だと罫線変更まで出来なくなってしまいます。 マクロは初心者です。こんなの↓を見つけてきましたが、セルごとの指定で範囲指定できません。また複数セルを選択してDeleteするとDeleteできてしまいます。 Const cnsRANGE_C1 = "$E$2" ' ここで指定する If Target.Address = cnsRANGE_C1 Then MsgBox "このセルの値は、変更・削除できません" Application.EnableEvents = False Application.Undo Application.EnableEvents = True どうぞよろしくお願い致します。

  • エクセルの保護されたシート内のデータの編集について

    エクセルでC~E列のみロックをはずしてシートの保護を行いました。この状態でC~E列のデータを含むすべてのデータの「並べ替え」や、列を「表示しない」などの操作を行いたいのですが、シート全体が保護されているためできません。うまく操作する方法はありますか?セルの値のみが保護される状態が理想です。

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

    今、エクセル2003でワークシートのデータを変更できないように、 シートの保護を設定しているところを今勉強しています。 ただ、あるセル範囲だけ、たとえばB4からD6の範囲は編集できるようにしたいのです。 それで、B4からD6の範囲は書式メニュー→セルの保護タブで、 ロックチェックボックスをオフにしました。 それから、ツール→保護→シートの保護で、シートを保護しました。 この時、B4からD6の範囲は、ロックをオフにしたので、 編集可能になるはずですよね? だけど、B4からD6の範囲意外のセルと同様、 セルの書式を変更できないんです。 これだったら、B4からD6の範囲のロックをオフにした意味が ないんじゃないでしょうか? ロックをオフにするとどう違うのでしょうか? よろしくお願いします。

  • 計算式を保護したシートの並び替えについて @excel2007

    あちこちに計算式が入ってるシートがあり、その計算式が保護された状態で、行を並べ替えたくていろいろ試してるのですが、どうしてもできません。どなたかアドバイスお願いいたします。現在の状態は、 シート全体を選択してから「セルの書式設定」「保護」で「ロック」のチェックをはずし、 F5キー「セル選択」で数式にチェックしてOK→「セルの書式設定」「保護」で「ロック」にチェック「表示しない」にチェック、 「書式」「シートの保護」を掛ける。※ ※このとき、最初にシートの保護をかけたときは「ロックされたセル範囲の選択」「ロックされていないセル範囲の選択」だけにチェックをいれてOKしたのですが、後に、行の並べ替えをする必要がでてきたため、いったん、 「校閲」→「シート保護の解除」で保護解除し、あらためて「シートの保護」→「ロックされたセル範囲の選択」「ロックされていないセル範囲の選択」「「並べ替え」にチェックをいれてOKしました。 ただ、これで並べ替えを実行しようと「データ」→「並べ替え」すると、エラーメッセージ 「変更しようとしているセルまたは・・・保護されているため読み取り専用となっています。・・・シートの保護解除をクリックして・・・」がでます。 (注)このシートについて、保護は計算式だけでいいのですが、並べ替えは、計算式の入ってる列も、計算式が入ってない列も行う場合があります。 また、マクロについては無知なので、ご了承ください。 よろしくお願いします。

  • エクセルのセルの保護

    ワークシートの一部分のセル表を入力禁止状態にしたいのですが。。。「ツール」の「保護」使っても、シート全体の保護はできるのですが、一部分というのがうまくいきません。お教えください。

専門家に質問してみよう