

初心者過ぎて大変恐縮です。
エクセルファイルのVBAについて教えてください。
表に入力をしたら→セルの色が変わる(条件付き設定で設定)→その後入力済みのセルはほかの人は再入力できなくする方法を探しています。
★その範囲としてはB3からD16までとします。
★ネットでVBAの再入力できなくコードを見たのですが、これでは最初から引っかかって
黄色の矢印と黄色で色付けされてしまいました。
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
どうかお知恵を頂けますでしょうか。よろしくお願いいたします。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
こんなのは、どうでしょうか?
原理を知っている人であれば、簡単に改竄できちゃうんですけど、ちょっとした入力ミスを防止するだけであれば、これで十分だと思います。
なお、「Microsoft Officeのユーザ設定」で個々の名前が設定されていることが前提となります。もし、設定していない場合は、デフォルトのユーザ名での入力を制限する必要があります。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Rs As Range
Dim r As Range
Set Rs = Intersect(Range("B3:D16"), Target)
If Rs Is Nothing Then Exit Sub
For Each r In Rs
If Not r.Comment Is Nothing Then
If r.Comment.Text <> Application.UserName Then
MsgBox "他の人が入力済みのセルを編集しようとしました。入力を無効にします。"
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
Exit Sub
End If
End If
Next
If Not Rs Is Nothing Then
For Each r In Rs
If r.Value <> "" Then
If r.Comment Is Nothing Then
r.AddComment
r.Comment.Text Text:=Application.UserName
End If
Else
If Not r.Comment Is Nothing Then
r.Comment.Delete
End If
End If
Next
End If
End Sub
No.3
- 回答日時:
こんにちは
>黄色の矢印と黄色で色付けされてしまいました。
ちょっと意味が分かりません
>その後入力済みのセルはほかの人は再入力できなくする方法を探しています。
他の人と自分をどのように区別するかで条件が変わります
①PCの違いで判断
②ログインユーザー名で判断
③起動時に判断 など
①PCや②ログインユーザー名での判断は同じような処理で可能と思います
③起動時に判断の場合はWorkbook_Openイベントなどでパスワード付きチェックなどの処理でグローバル変数に権限キーを代入してChangeイベントなどで使い回せば、誰が運用しているかを判断できると思います
同じPC同じログインユーザー名でExcelを使っていて、かつ既に開かれているブックを権限によって操作を抑制する場合は、(操作)実行時のトリガー内に確認用ロジックを入れるしか方法がないのではないかと思います
此の辺まで分かりますでしょうか・・
②の例 (内容はなさりたい事なのかは未検証)
先ず自身のログインユーザー名を取得してみてください
多分判り難いと思うので下記を実行(結果を参考)
Sub test0()
'ログインユーザー名を取得
Debug.Print Environ("USERNAME")
MsgBox Environ("USERNAME")
End Sub
メッセージボックスとイミディエイトウィンドウに出力されます
下記の ログインユーザー名 を変更してください
ここから・・シートモジュールに
Private Sub Worksheet_Change(ByVal Target As Range)
Const UrName As String = "ログインユーザー名"
If Intersect(Range("B3:D16"), Target) Is Nothing Then Exit Sub
If UrName <> Environ("USERNAME") Then
'不要?---
MsgBox "管理者以外入力できません"
With Application
.EnableEvents = False
.Undo
.EnableEvents = True
End With
Exit Sub
'---不要?
Else
If Target.Value = "" Then Exit Sub
ActiveSheet.Unprotect '保護解除
Target.Locked = True 'ロック
'追加あればここに記述
ActiveSheet.Protect '保護
End If
End Sub
自分
ロックのないセルに入力した場合、入力されロックがかかる
すでにロックがかかっている場合、保護・・・が表示される・・はず・
他の人
ロックのかかっていないB3:D16の範囲に入力
MsgBox "管理者・・が出力され入力前の値に戻る
すでにロックがかかっている場合、保護・・・が表示される・・はず・
自分が値を変更したい場合
セルをダブルクリック ロック解除 入力できる
他の人は 解除されない
解除のコード 同じシートモジュールに
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Const UrName As String = "ログインユーザー名"
If Intersect(Range("B3:D16"), Target) Is Nothing Then Exit Sub
If UrName = Environ("USERNAME") Then
ActiveSheet.Unprotect '保護解除
Target.Locked = False 'ロック
Cancel = True
End If
End Sub
保護も解除しています
ログインユーザー名を適当に入れると違うユーザーとして認識されますのでテスト時に確認してみてください
Worksheet_BeforeDoubleClickではなく
Worksheet_Activateなどもありますがどちらにしても 少々面倒で
都度行う事にあまり生産性を感じられないので、普通に保護・ロックを掛け使ってもらえば良いように思いますね
サンプルコードを参考に 閉じる時に自動で保護を掛ける 開く時に自動で保護を解除する とか・・
No.2
- 回答日時:
こんにちは
記載していないことが多いので、よくわかりませんけれど、「シートの保護」機能を利用しようというおつもりでしょうか?
まず保護をかけた際に、他のセルの編集をどうしたいのかにもよります。
他のセルは誰でも自由に編集可であるなら、最初に全セルのプロパティでロックを外しておく必要があります。(デフォルトではロックが掛かっていると思いますので・・)
あるいは、一部は不可などであったり、操作内容の許可なども設定するのなら、それに応じたオプション設定が必要になります。
一方で、最初に保護を欠ける際に、マクロから
UserInterfaceOnly:=True
を設定しておくことで、通常の(人間の)操作では保護状態ですが、マクロからの変更は可能と言う保護になりますので、イベント処理内で保護をはずしたりかけたりしなくても済むようになります。
https://learn.microsoft.com/ja-jp/office/vba/api …
こうしておくことで、処理としては単に「対象セルにロックをかける」だけで済むようになると思います。
>入力済みのセルはほかの人は再入力できなくする方法を探しています。
「他の人」というのが、質問者様以外という意味であれば、操作者の識別が必要になると考えられます。
ご提示の保護の方法だと、ボタン一つで簡単に保護を解除できてしまいますので、パスワードは必須ではないでしょうか。
また、上記の方法で保護をかけておけば、ご提示のマクロ内にはパスワードを書く必要が無くなりますので、安全性は高くなると言えるでしょう。
他の人と質問者様を区別する方法としては、Environ関数を利用して
Environ("USERNAME")
でログインユーザ名を取得できますので、これを利用することで識別できるのではないかと思いますが・・
(同じログイン名を共用しているなどの場合は、ダメですが)
もしも、こちらで識別できる利用環境なら、質問者様が利用する時だけ保護を解除しておくなどにしておけば良いのではないでしょうか?
https://learn.microsoft.com/ja-jp/office/vba/lan …
まぁ、ご自身の場合は、手操作で保護を解除しても良いのではないかとは思いますけれど・・

No.1
- 回答日時:
この質問内容で実現が難しい、と言うか、不可能なのは、「ほかの人は再入力できなくする方法」と言う箇所です。
「自分ならok」と解釈出来ますが、AI付きカメラを使って、エクセルが自動で「あたな本人」を認識する方法が無いので無理です。
あなた自身も、入力不可になります。
手動で設定を変更する必要が出て来ます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのVBAでダブルクリックでチェックを入れたあと 1 2022/10/26 20:30
- Visual Basic(VBA) vbaでセルに入力したときに,その横にあるセルを保護し入力不可にするマクロを作りたいです。 2 2022/04/24 20:59
- Visual Basic(VBA) VBAで重複した値のセルに色付けをしたい 1 2022/11/02 16:12
- Visual Basic(VBA) エクセルVBA ダブルクリックしたら色反転を指定したセルのみにしたい 2 2022/04/06 12:52
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) 【VBA】写真の貼り付けコードがうまく機能しません。 5 2022/09/01 18:43
- Visual Basic(VBA) 複数csvを横に追加していくマクロについて 2 2023/04/25 09:19
- Excel(エクセル) VBAについて 3 2022/06/19 18:19
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Excel(エクセル) エクセルのイベントプロシージャーでF列の最終行のセルの入力をトリガーにしたいのですが 1 2022/10/14 09:36
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
-
大麻の使用罪がなかった理由や法改正での変更点、他国との違いを弁護士が解説
ドイツで2024年4月に大麻が合法化され、その2ヶ月後にサッカーEURO2024が行われた。その際、ドイツ警察は大会運営における治安維持の一つの方針として「アルコールを飲んでいるグループと、大麻を吸っているグループ...
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
【エクセル】関数で「A1が0でな...
-
エクセルの入力規則で作ったリ...
-
エクセルでセルにポインタする...
-
エクセルでセルのコメントが消...
-
エクセルVBA ブックを閉じる前...
-
シートを保護しても入力規則を...
-
【エクセル】期限アラートについて
-
【Excel】ドロップダウンリスト...
-
エクセル逆三角マークで選択項...
-
エクセルで、入力制限(プルダ...
-
Excelでセルにデータを表示(右...
-
EXCEL:入力規則の「リスト」は...
-
カンマで区切った数値をCOU...
-
エクセルで、入力できる箇所を...
-
エクセルで、セルをクリックす...
-
入力規則をブック全体にかける...
-
エクセル 入力規則のリストボ...
-
入力規則の入力時メッセージの...
-
エクセルでセルに入力しないと...
-
excelの入力規則リストで重複不...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【エクセル】期限アラートについて
-
【エクセル】関数で「A1が0でな...
-
エクセルでセルにポインタする...
-
エクセルでセルのコメントが消...
-
エクセルの入力規則で作ったリ...
-
シートを保護しても入力規則を...
-
エクセルVBA ブックを閉じる前...
-
エクセルで、入力制限(プルダ...
-
エクセル逆三角マークで選択項...
-
【Excel】ドロップダウンリスト...
-
エクセルで、入力できる箇所を...
-
エクセル 入力規則のリストボ...
-
入力規則の入力時メッセージの...
-
ドロップダウンリスト(INDIREC...
-
カンマで区切った数値をCOU...
-
フォーム入力で入力規則を設定...
-
エクセルで電話番号から市内局...
-
エクセルVBA ユーザーフォーム...
-
エクセルで。
-
Excelでセルにデータを表示(右...
おすすめ情報