EXCELで作成された申請書や報告書などのフォームに入力後、印刷して提出するのではなく、最近では「メール添付で提出」 といった運用も増えてきたようで、ファイルのやりとりから生じる不都合にお困りの方も多いかと思います。
EXCEL屋 読者の方から要望をいただきましたので解説いたします。
いただいた質問(本文)
⇒具体的には・・・
Excelフォーマットの入力後、誤操作により誤って上書きされてしまうことを避けるため、決まったセルに何か入力されると、自動的に決められた複数のセル範囲に自動的な保護がかかる。
Excelのセル保護・シート保護機能だけでは条件付きの自動保護はできなさそうで、マクロを利用すれば解決できるのでしょうか?
↓ 簡単動画からご覧ください。
紹介しました機能付きエクセルファイルをご希望の方へメールでお送りしています。いちばん下にある「ファイル申し込み」へご登録ください。
再入力禁止にする方法
VBAプロジェクトを呼び出す
①保存禁止にしたいエクセルブック上で[Alt]+[F11]を押します。
VBAプロジェクトへコードを書く
①「VBAプロジェクト」が現れたら「Sheet1」を選択します。
②「Worksheet」を選びます。(コピペする場合は選択不要)
③「Change」を選びます。(コピペする場合は選択不要)
④「コードウィンドウ」にコードを書くのですが、コピー用のコードを用意してあります。下の「コピペしてください」の9行をコピーして貼り付けてください。
コピペしてください
Private Sub Worksheet_Change(ByVal Target As Range)
Dim R As Integer, C As Integer
R = Target.Row
C = Target.Column
If Cells(R, C) = “” Then Exit Sub
ActiveSheet.Unprotect ‘保護解除
Cells(R, C).Locked = True ‘ロック
‘追加あればここに記述
ActiveSheet.Protect ‘保護
End Sub
コードの解説
今回はイベントプロシージャという機能を使用します。イベントとはマクロが起動するための「きっかけ」のことだと理解してください。
今回使う Change イベントは=シート上の値に変化があった場合、マクロが起動します。
Target.Rowは変化のあった「行」、Target.Columnは変化のあった「列」です。If Cells(R, C) = “”はデータ削除は対象外という意味です。
Cells(R, C).Locked = True で入力されたセルのロックをかけています。
もしこのタイミングで入力セル以外にも保護をかけたいセルがある場合は、RANGE(“A1:D1”).Locked = True 等の記述を書き加えればOKです。
シートの設定
1回目の入力を許可するセルのロックを外して、シートの保護をかけておきます。下図の場合は、「氏名」「年齢」の入力セル C2:C3 のロックを外します。
マクロ有効ブックとして保存
名前を付けて保存で保存する際は、「ファイルの種類(T)」を「Excelマクロ有効ブック(*.xlsm)」に指定します。
無料ファイルプレゼント
今回の記事で紹介したEXCELファイルをメールで安全にお届けいたします。
お送りするファイルはWindows7以降、Office2007以降に対応しております。
ご指定のメールの迷惑設定により到着しない時は迷惑設定を解除してください。