こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

《エクセル2000》特定のセルだけ上書き禁止にしたい

タイトルの通りですが、任意のシートの特定のセルのみ、変更禁止にしたいです。(数にして1シートあたり30くらい)

ただし、「特定のセル」以外のセルは文字色やセルの色など、書式を変える必要があるので、「シートの保護」は使えません。

「セルのロック解除」+「シートの保護」以外の方法で、特定のセルのみを保護する方法はあるでしょうか。

投稿日時 - 2005-06-21 17:53:07

QNo.1463857

すぐに回答ほしいです

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

> 書式貼付けだと複数ある転送元のファイルのVBAを書き換えなくてはなりません。
VBAの内容を書き換えなくても、別シートのセルに任意の書式を設定し、その書式を
VBAとは別にコピーすればよいと思うのですが、ご主旨を理解できていないせいで
でしょうか。

一応、マクロの件です。
実は私もマクロは得意ではないのですが。。。。。  ^_^;

とりあえず、3枚のシートそれぞれに複数個の「特定のセル」があるとします。

まず、名前を3つ(シートの数分)定義します。
1.Sheet1の特定のセルすべてを選択して、名前ボックスで名前をつけます。
   とりあえず、DAME という名前にしましょう。
2.Sheet2の特定セルすべてを選択して QQQ という名前をつけてから、[挿入]-
 [名前]-[定義] で QQQ を選択し、名前欄を Sheet2!DAME に書き換えて
 [追加]をクリックします。
 QQQ は[削除]します。
3.Sheet3の特定セルすべてを選択して QQQ という名前をつけてから、[挿入]-
 [名前]-[定義] で QQQ を選択し、名前欄を Sheet3!DAME に書き換えて
 [追加]をクリックします。(QQQ は[削除]します)

次にマクロを記述します。
1.[Alt]を押しながら[F11]を押して、Visual Basic Editor を起動します。
2.画面左側のツリー内にある ThisWorkbook をダブルクリックし、開いた画面に
 以下をコピペします。
 '--- コピーは次行から
 Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, _
    ByVal Target As Range)
   Dim RNG As Range
   Application.ScreenUpdating = False
   For Each RNG In Range("DAME")  '※
     If Target.Address = RNG.Address Then
       Range("AZ1").Select
     End If
   Next
   Application.ScreenUpdating = True
 End Sub
 '--- コピーは前行まで。

<マクロの処理内容>
※の行を含めた以下5行で、選択セルが DAME に含まれている(特定セル)か
どうか判断します。
含まれない場合は何もしないで処理を終了し、特定セルならセルAZ1を選択します。
ここではAZ1にしましたが、実際には、どのシートでも"特定のセル"に含まれて
いないセルのアドレスを指定してください。(特定セルのアドレスを指定すると、
マクロがループしてしまいます。)
なお、複数セル範囲が選択された場合の処理はしていません。
選択範囲が特定セルを含むかどうかチェックする処理を加えますと、特定セルが
含まれない列全体が選択されたときなど、検査にかなりの時間がかかってしまう
からです。

投稿日時 - 2005-06-22 13:57:17

お礼

ありがとうございます!
概要を教えて頂ければ、と思ったのですが、懇切丁寧に解説していただいて、本当に助かりました。
あとでゆっくり試してみたいと思います。

投稿日時 - 2005-06-22 14:25:52

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.1

シートを保護しても、ロックを外してあるセルにつきましては、文字色やセル色
などの書式は「コピー・形式を"書式"にして貼り付け」で変更できます。

マクロで、特定のセルが選択されたら強制的に特定のセル以外のセルにアクティブ
位置を移してしまうことも考えられますが、シートを保護されるほうが簡単だと
思います。

投稿日時 - 2005-06-21 23:29:09

お礼

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

実は、保護したいセルがあるシートに、他ファイルからVBAでデータを転送するという処理がしてあります。

「書式貼り付け」だと、複数ある転送元のファイルのVBAを書き換えなくてはなりません。

もしよろしければ、強制的にアクティブセル位置を移すVBAの概要を教えて頂けませんでしょうか。
(VBA初心者なもので、コードの仕様が想像つきません…)

投稿日時 - 2005-06-22 10:24:26

あなたにオススメの質問