- 締切済み
(マクロ)特定のセルを変更しようとしたら確認メッセージが出るようにしたい
表題の通りです。 ある、特定のセル(ここの入力次第で金額が大幅にずれ、決算が間違う可能性がある:現在リストから選択)を変更したら本当にこれでよろしいですかと表示が出て、はいと押したら変更が反映され、いいえとおしたら反映されない。 このようなマクロの組み方ってどうすればいいでしょうか?リストにしてあるため(入力は3通り)誤って他のものを選択してしまう可能性があるのが怖いんです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- ASIMOV
- ベストアンサー率41% (982/2351)
Private Sub Worksheet_Change(ByVal Target As Range) toku_l = 1: toku_c = 1 '特定セルの座標 l = Target.Row: c = Target.Column If (toku_l = l) And (toku_c = c) Then x = Target.Value toku1 = 1: toku2 = 2: toku3 = 3 'リストに設定されている値 If Not ((x = toku1) Or (x = toku2) Or (x = toku3)) Then yn = MsgBox(" 本当に " & x & " でよろしいですか", vbYesNo) If yn = vbNo Then Cells(toku_l, toku_c) = toku1 'デフォルトの値 End If End If End If End Sub --------------------------- 特定セルの座標 リストに設定されている値 デフォルトの値 の、3つを現在のシートに合わせて、変えてください
- ham_kamo
- ベストアンサー率55% (659/1197)
1.まず、新たなシートを追加し、「作業用」というシート名にしてください。 2.数値を入力するシートの見出しを右クリックし、「コードの表示」でVBAの画面を出します。 3.以下のマクロを貼り付けてください。 Private Sub Worksheet_Activate() Worksheets("作業用").Range("A1").Value = Range("B2").Value End Sub Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address(False, False) = "B2" And Target.Value <> Worksheets("作業用").Range("A1").Value Then Beep If MsgBox("本当にこれでよろしいですか", vbYesNo + vbQuestion, "確認") = vbNo Then Target.Value = Worksheets("作業用").Range("A1").Value End If Worksheets("作業用").Range("A1").Value = Target.Value End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address(False, False) = "B2" Then Worksheets("作業用").Range("A1").Value = Target.Value End If End Sub 4.上記のマクロの中に3カ所「B2」と出てきますが、それを実際に値を入力するセルの番地に書き換えてください。 これでご希望の動作ができると思います。一応仕組みとしては、 ・そのシートが表示されたり、そのセルが選択されたときに、作業用のシートに元の値をコピーして保存しておく。 ・そのセルの値が変更されたとき、「これでよろしいですか」というダイアログを出し、「いいえ」を選択したときは、そのセルの内容を保存しておいた元の値に戻す。 ということをやっています。作業用シートを表示したくないときは、作業用シートを選択してから「書式」>「シート」>「表示しない」で非表示にすればいいでしょう。 もしご希望の通りに動かない場合は補足をお願いします。
補足
ありがとうございます。早速試してみました。 ただ二点ほどうまくいかない点があったので追加で教えていただけないでしょうか? 一点目は >Cells(toku_l, toku_c) = toku1 'デフォルトの値 となっていますがデフォルトの値に戻すのではなく、前回の内容に戻したいのです。 つまり、例えば現在入力規則でリスト1、リスト2、リスト3と3通り選べるようになっています。このときリストが現在リスト2の状態であったときにリスト3を選んだら、本当にこれでいいですかと表示が出てハイを押せばリスト3、いいえを押せばリスト2に戻るようにしたいのです。 教えていただいた方法では常にデフォルトの値になってしまいます。 二点目は、 If Not ((x = toku1) Or (x = toku2) Or (x = toku3)) という箇所ですが、これですとリストにない項目を入力してはじめて then以降が実行される式だと思います。 つまり、リスト2からリスト3に選択したときTHEN以降が実行されないと思うのです。 これを解決するためにマクロの本をだいぶ読んだのですが、私の知識不足でどうしても解決方法がわかりません。 つきましては解決方法をご教授願えないでしょうか?