いろんな人が使うエクセルだと、関数が入っていたりなど変更してほしくないセルがあったりします。そういう場合に使われるのがシートの保護です。
保護しておくと、設定したセル以外は入力ができなくなるので安心ですよね(^^)
ただ、この状態でVBAでデータをコピペしようとすると
というエラーメッセージが出てコピペができなくなってしまうんです。
今回は、このようなシートの保護がかかっているエクセルファイルにVBAでデータをコピペする方法をご紹介します。
この記事の最後にサンプルコードが入ったエクセル&コピー元・コピー先ファイルが入ったフォルダがダウンロードできるリンクがありますので、自分でコードを実行してみたい場合はダウンロードしてみてください。
サンプルコード
今回ご紹介するコードは「コピー元.xlsx」のデータをコピーして「コピー先.xlsx」に貼り付けるコードになります。
実行結果はこんな感じになります。
コピー先.xlsxにはシートの保護がかかっていますが、あとから個数を手で変更できるようにC列の10行目までは保護がかかっていない状態、という設定です。
それではサンプルコードを見てみましょう。
Option Explicit
Sub Sample()
Dim FilePath As String
Dim FileName1 As String
Dim FileName2 As String
'ファイルの入っているフォルダをパスを設定
FilePath = ThisWorkbook.Path
'ファイル名を設定
FileName1 = "コピー元.xlsx"
FileName2 = "コピー先.xlsx"
'コピー先のブックを開く
Workbooks.Open FilePath & "\" & FileName2
'Sheet1の保護を解除する
Worksheets("Sheet1").Unprotect
'コピー元のブックを開く
Workbooks.Open FilePath & "\" & FileName1
'データをコピー
Workbooks(FileName1).Worksheets("Sheet1").Range("A1:E5").Copy _
Workbooks(FileName2).Worksheets("Sheet1").Range("A1")
'コピー先ファイルの個数の欄のみ編集可能にする
Workbooks(FileName2).Worksheets("Sheet1").Range("C2:C10").Locked = False
'コピー先ファイルのSheet1を保護する
Workbooks(FileName2).Worksheets("Sheet1").Protect
'コピー元のブックを閉じる(セーブしない)
Workbooks(FileName1).Close savechanges:=False
'コピー先のブックを閉じる(セーブする)
Workbooks(FileName2).Close savechanges:=True
End Sub
コードの解説
データのコピペをする前にUnprotectを使ってシートの保護を解除、コピペが終わった後にProtectを使って再度シートの保護をしています。
20行目のWorksheets(“Sheet1”).Unprotectというコードで、直前に開いたコピー先.xlsxというファイルのSheet1の保護を解除しています。
33行目のWorkbooks(FileName2).Worksheets(“Sheet1”).Protectというコードで、コピー先.xlsxというファイルのSheet1に再度保護をしています。
変更可能なセルを設定したい場合は、保護をかける前に、Workbooks(FileName2).Worksheets(“Sheet1”).Range(“C2:C10”).Locked = False
のような形で一部のセル範囲(サンプルコードではC2からC10の範囲)についてはロックをしないようにしています。
エクセルの操作でいうと、「セルの書式設定」のロック(下図の赤枠部分)の選択を外す動作と同じことをVBAでしているわけです。
今回のテーマはシートの保護の解除なので、データのコピペをする部分については説明は割愛します。コードの解説についてはこちらの記事をご参照ください。
解説動画
動画にて解説をしております。実際の画面を見ながらの方がわかりやすいと思いますので、ぜひこちらも見てみてください。
まとめ
今回は、シートの保護のかかったファイルにデータをコピペする方法について解説しました。
会社で共有で使っているファイルなどは保護がかかっていることが多々あるので、VBAが使えなくて困る、という場面でぜひ使ってみてください。
参考になれば幸いです(^^)/
ダウンロード
ファイルのダウンロードはこちらからどうぞ!
お問い合わせ、お仕事のご依頼などがありましたら下記のお問い合わせフォームからご連絡ください。
お問い合わせフォーム
VBAの作成であれば3万円ほどから、自分で使うVBAの書き方で詰まっている方のお手伝いであれば5,000円ほどから承ります。
コメント