エクセルVBAを使って、エクセルに直接入力したら、本当に変更しますか?とmsgboxを出したいです。
保護をかけるほどではなし、直接入力もほとんどしないような
(一覧表があって、その中をダブルクリックで選択すると、
自動的に目的のシートに入力されるようなVBA)
を組んでいるのですが、
たまに、直接入力したいときに、入力してもいいの?と確認したいです。
(↑むしろ、これがたまにあるので、保護をかけておきたくなのですが)
皆で共有するシートになりますので、
誤って違うセル(他人が書き込み済みで変更の必要がないセル)に書きこまないようにと、
追加で書き込む内容の確認を込めて、
エクセルに直接入力したあと、
「本当に変更していいですか?」
yes→変更させる
no→変更させない
みたいなことしたいのですが、
さっぱり、どうしたらいいかわかっていません。
ワークシートのchangeだと、
変更してしまってから動くみたいで、、
変わる前に上の動作はかけれないみたいだったので。
こういったことはできるのでしょうか?
わかるかた、ご教授ください。
ざっくりした言い方ですみません。
どのようにわからないことを伝えていいかもわからないぐらい、
悩んでいます。
指摘がありましたら、補足させていただきます。
よろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
つぎでいいのではないでしょうか。
VbNoで変更しません。
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
dim resp as integer
resp = MsgBox("本当に変更するのかい", vbYesNo)
If resp = vbNo Then
Application.Undo
End If
Application.EnableEvents = True
End Sub
No.3
- 回答日時:
VBAを使わなくとも全く同様のことができる方法があります。
セルへの入力で何かを入力しようとすれば注意を出す方法です。
注意を出したいセルの範囲を選択してからエクセル2010でしたら「データ」タブの「データの入力規則」をクリックします。
表示の画面の「設定」タブでは入力値の種類で「ユーザー設定」を選択し、数式の窓には =A1<>A1 などと式を入力します。
その上で同じ画面で「エラーメッセージ」タブをクリックします。
スタイルの窓では「注意」を選択し、エラーメッセージの窓には「本当に変更してもいいですか?」などと入力してOKします。
これでお望みの操作ができるようになります。
ありがとうございます。まさか、VBAを使わなくてできるとは!
目からうろこでした。
この回答をいただいてから、エクセルでできることは、エクセルで設定したほうが、
動作が軽くなるのでは?と思い、エクセルできることを探しています。
ただ、数式はセルの数だけ、設定していかないといけないのでしょうか?
B1のセルも同じようにしたかったら、
=B1<>B1
を入力していく?
実は、100個ぐらい品物の数がありますので、一気にできることがあれば、使えるのですが、
ちょっとわからなかったので。また、地道に調べていこうと思います。
でも、エクセルでできるという、考え方はとてもありがたく、役立ちました。
こちらも、ベストアンサーに選びたかったのですが、
一応、VBAということで。本当にすいません。
でも、助かっています。
ありがとうございました。
No.1
- 回答日時:
ざっくりこんな感じ。
ワークシートのところへ貼り付けてみてください。
Private aaa As String
Private Sub Worksheet_Change(ByVal Target As Range)
Dim ret As Integer
If Cells(Target.Row, Target.Column) <> aaa Then
ret = MsgBox(aaa, vbOKCancel)
If ret = vbCancel Then
Cells(Target.Row, Target.Column).Value = aaa
End If
End If
End Sub
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
aaa = Cells(Target.Row, Target.Column).Value
End Sub
説明:
Worksheet_SelectionChangeで、aaaという変数にセルの値を保存しておいて
Worksheet_Changeでキャンセルなら、aaaという変数から戻す。
ただし、ファイルを開いた直後にカーソルがいるセルを変更するときは、
Worksheet_SelectionChangeは動いていないかも。
動いていないなら、worksheet_activateか他のイベントで、selectされているセルの値を
aaaへ入れておかないとダメ、かも。
(未確認です。確認してみてください。・・・わからないようでしたら、こちらで調べてみますけど。)
回答ありがとうございました。
試してみましたが、言われている通りに、目的のセルからずれてしまうことがありました。
それを直す方法は私ではわかりませんでした。
No.2の方の方法を採用させていただこうと思います。
でも、こんなにしっかり考えていたいて、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) CSVファイルでVBAを動かす方法 3 2023/04/04 10:22
- Excel(エクセル) エクセルでシート保護のかかり方の違いとセルの非保護の設定 3 2022/08/09 10:02
- Excel(エクセル) エクセルの表示形式について教えてください あるセルの「A」という値と、別のセルの「B」という値を組み 4 2023/02/21 21:55
- Excel(エクセル) マクロ/VBAについて教えてください。 10 2022/05/27 12:59
- Visual Basic(VBA) VBAで出力したCSVファイルの先頭にカンマを挿入したい 5 2022/10/14 12:20
- Excel(エクセル) エクセルで条件付き書式を使わずにセルの文字の色を変える方法を教えて下さい 8 2023/07/28 01:15
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Excel(エクセル) エクセルで計算結果が0でないときのみセルを更新したい 4 2022/07/30 11:58
- Excel(エクセル) エクセルVBAでチェックボックスにチェックを入れる 1 2022/09/14 00:52
- Visual Basic(VBA) VBA 複数のブックに同じ列を表示させる方法 2 2022/07/20 23:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VBAで、貼り付け禁止命令を実現...
-
EXCELマクロ 保護されているシ...
-
【VBA】参照値を1ずつ増やして...
-
ユーザーフォーム上のボタンの...
-
エクセルで表がありそのセルに...
-
エクセルVBA セル選択後にカレ...
-
数字を割った余りを出す方法。
-
エクセル: セルの枠を超えて表示
-
エクセル vbaについて教えてく...
-
エクセルで表示形式の時刻の「0...
-
エクセルのセル内に全角数字を...
-
エクセル 足して割る
-
日付だけを変更して印刷(Excel)
-
エクセルの2ページ目の作り方
-
エクセルのアポストロフィを一...
-
EXCELで特定のセルに表示...
-
セルの塗りつぶしに透明度を設...
-
入力後に日付順になるように自...
-
Excel入力で勝手にエンター押さ...
-
E列のセルに数値が入れば(空白...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データが入力されている隣のセ...
-
EXCELマクロ 保護されているシ...
-
エクセルテキストボックスの文...
-
VBAで、貼り付け禁止命令を実現...
-
Excelについて
-
メッセージを1度だけ表示したい。
-
ダブルクリックすると現在の時...
-
ハイパーリンクされているファ...
-
エクセルVBA セル選択後にカレ...
-
Jtableの特定のセルの背景色や...
-
VBAで丸をつけたいです。
-
エクセルVBA(実行時エラー438...
-
Excelのセル内にある図形を削除...
-
Swing 編集不可でも選択可能なJ...
-
(VBA)アクティブセルを起点に...
-
Excel VBA セルを指定個数ラン...
-
VBA セルに合わせて移動するが...
-
Windowsで動くVBAがmacOSで動か...
-
セル色を5秒間隔で変える
-
Excel VBA ダブルクリックで入...
おすすめ情報