• 締切済み

(マクロ)特定のセルを変更しようとしたら確認メッセージが出るようにしたい

表題の通りです。 http://oshiete1.goo.ne.jp/qa2534226.html で質問してURLにある回答を頂いたのですが、まだわからないことがありますので教えていただけないでしょうか? (すいませんが少々急いでおります) わからないことは以下の通りです。お願いします。 一点目は >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以降が実行されないと思うのです。

みんなの回答

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 前のは一旦、締めたほうがよいですね。 前のものも読んではいたのですが、私は、あえて、マクロにする理由が良く分かりませんでした。入力規則のリストですから、設定条件に合わせて、入力値を排除したほうが早いような気がしました。 こういうことですか? Const KISOKU の部分を適当に直してください。 Private Sub Worksheet_Change(ByVal Target As Range)  Const KISOKU As String = "C2"  '入力規則の設定場所  If Target.Address(0, 0) <> KISOKU Then Exit Sub  Application.EnableEvents = False  If MsgBox("本当にこれでよいのですか?", vbOKCancel) = vbCancel Then   Application.Undo  End If  Application.EnableEvents = True End Sub

関連するQ&A

  • (マクロ)特定のセルを変更しようとしたら確認メッセージが出るようにしたい

    表題の通りです。 ある、特定のセル(ここの入力次第で金額が大幅にずれ、決算が間違う可能性がある:現在リストから選択)を変更したら本当にこれでよろしいですかと表示が出て、はいと押したら変更が反映され、いいえとおしたら反映されない。 このようなマクロの組み方ってどうすればいいでしょうか?リストにしてあるため(入力は3通り)誤って他のものを選択してしまう可能性があるのが怖いんです。 よろしくお願いします。

  • マクロ:セルの選択

    他の方の作ったマクロなのですが、 入力されている次の行(空白行)を選択する、というものだと思うのですが 400行ほど入力があり、その後マクロを実行すると更に空白行を400行ほどいった行が選択されてしまいます。 その間の空白に見える400行を全て削除してやり直しても同じです。 何か原因は考えられるでしょうか? 関係のありそうなマクロ↓ Gyou1 = ActiveCell.Row Do While Cells(Gyou1, 2) <> Empty Or Cells(Gyou1, 3) <> Empty Or _ Cells(Gyou1, 4) <> Empty Or Cells(Gyou1, 5) <> Empty Or _ Cells(Gyou1, 6) <> Empty Or Cells(Gyou1, 7) <> Empty Or _ Cells(Gyou1, 8) <> Empty Or Cells(Gyou1, 9) <> Empty Or _ Cells(Gyou1, 10) <> Empty Or Cells(Gyou1, 11) <> Empty Or _ Cells(Gyou1, 12) <> Empty Or Cells(Gyou1, 13) <> Empty Or _ Cells(Gyou1, 14) <> Empty Or Cells(Gyou1, 15) <> Empty Or _ Cells(Gyou1, 16) <> Empty Or Cells(Gyou1, 17) <> Empty Or _ Cells(Gyou1, 18) <> Empty Or Cells(Gyou1, 19) <> Empty Or _ Cells(Gyou1, 20) <> Empty Or Cells(Gyou1, 21) <> Empty Gyou1 = Gyou1 + 1 Loop よろしくお願いします。

  • エクセル2000のマクロで、if文が想定通りに動かない

    90から93列目にかけて、データが 0又は3~4桁の数字が入っている状態です。 4810,0,0,2430 以下はマクロの抜粋です。 やりたいことは、0でなければ各変数に1を代入し、95列めに合計を入力します。 If Cells(i, 90) <> 0 Then w = 1 If Cells(i, 91) <> 0 Then x = 1 If Cells(i, 92) <> 0 Then y = 1 If Cells(i, 93) <> 0 Then z = 1 Cells(i, 95).Value = w + x + y + z このマクロを実行しますと、実際には0でない列が2列にもかかわらず、95列目に3と入力されてしまいます。1行ずつ実行してみたら、if文の3行目の92列目の判定が変です。 実行中に、カーソルをかざすとCells(1, 92)=0と表示されるのですが、合計を代入するところの y には1が代入されてしまっています。 何か間違っているんだと思いますが、分かりません。よろしくお願いします。

  • マクロ A1のセルの値を見て、B1に値を入力したい。

    エクセルのマクロでA1の値が1ならばB1にaを、2・3・4ならばbを、5ならばCを、それ以外は「該当無し」と入れたいのですが下のマクロではうまく行きません。ぜひご指導ください。 Sub If Left(Cells(1, 1).Value, 1) = 1 Then Cells(2,1).Text = "a" ElseIf Left(Cells(1,1).Value, 1) = 2 Or _ Left(Cells(1,1).Value, 1) = 3 Or _ Left(Cells(1,1).Value, 1) = 4 Then Cells(2,1).Text = "b" ElseIf Left(Cells(z, 37).Value, 1) = 5 Then Cells(2,1).Text = "c" Else: Cells(z, 40).Text = "該当無し" End If End Sub

  • Excelマクロ

    お世話になります。 Excelのマクロに関する質問です。 目的としては、D列に様々な文言が入っており、 D列に記入されている各文言の数をカウントしたいと思っています。 ただし、D列の各文言が複数あった場合でも、 A列が同じ値の場合は数に含めない、という条件があります。 ex)D列に「りんご」という文言が10個あります。   D列に「りんご」と記入されている行のA列は、 「赤」「青」の2パターンしかありません。 ⇒この場合、「2」とカウントしたいです。 現在、以下のマクロを考えています。 =========================================================== sub test() Dim i As Long, x As Long, cnt As Long, buf As Object '「i」「x」「cnt」を数値として定義。「buf」にD列の値を格納します。 x = 4 '4行目以降を対象としています。 Do While Cells(x, 1).Value <> "" 'A列が空白でない場合のみを対象とします。 cnt = 0 '各行のD列に入っている値の数を数えるため、まずはカウントを0にします。 i = 4 '4行目以降を対象としています。 Set buf = Cells(x, 4) ' D列の値を変数「buf」に格納します。 Do While Cells(i, 1).Value <> "" 'A列が空白でない場合のみを対象とします。 If Cells(i, 4).Value = buf And Cells(i, 1).Value <> Cells(x, 1).Value Then  ' D列の値が「buf」に格納した値と同じ、かつ、       ' A列の値が、bufに値を格納した時と異なる場合のみ対象 cnt = cnt + 1 '数を数える対象であれば、+1します。 End If i = i + 1 '次の行に移るために+1します。 Loop Cells(x, 5).Value = cnt ' E列にcntに格納された値を入力 x = x + 1 '次の行に移るために+1します。 Loop end sub ===================================================== 上記のマクロでは、E列にカウント後の数らしいものが入力されるのですが、 値が正しくないようです。 お力添えをいただけますでしょうか。 よろしくお願いいたします。

  • エクセルマクロ 【空白セルを無視する方法を教えてください】

    マクロを独学で学び仕事に応用しているのですが、どうしても分からないことが発生してしまい、質問です。 内容は、今、エクセルシートのA1~B5の範囲で A B 1 1 1 2 1 2 3 4 1 5 1 という形で入力されています(見難くてスミマセン)。 この状態から「A列とB列に同じ数字が入力されてれば、メッセージBOXを表示して、なおかつOKボタンを押したら該当セルを赤くする」というマクロを作りたいのですが、本来であれば1行目のみ赤くなるはずなのですが、空白セルが含まれている3行目も赤くなってしまうんです。つまり、空白セルも「同じ値」と認識されているみたいなのですが...。 この場合、空白セルを無視するにはどうしたらよいのですか?教えてください。なお、マクロは以下のように作っています。 Sub ナンバーチェック() Dim Btn As Integer For X = 5 To 10 If Cells(X, "A").Value = Cells(X, "B").Value Then  Btn = MsgBox("同じ数値です", vbOK, "警告")  If Btn = vbOK Then   Cells(X, "A").Interior.ColorIndex = 3 Cells(X, "B").Interior.ColorIndex = 3 End If End If Next End Sub

  • Excelでセルの値を変化させた時にマクロを実行するには?

    "A1"のセルに値を入れるとマクロが実行するように組んだのですが、問題が発生しました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target = Range("A1") Then      cells(1,2)=5      ・・・・ End If End Sub ここでA1に"5"を入力すると、B1に5と入力されるのですが、Target=5と認識してしまい、A1と同じ値になるので無限ループになってしまいます。 なにか回避策はないでしょうか? よろしくお願いします。

  • 判定してセルを塗りつぶすマクロについて

    判定してセルを塗りつぶすマクロについて教えて下さい。 現在下記のようなマクロがあります。 Sub オニオン判定() Dim i As Integer, j As Integer, r As Integer Dim k As Double Range(Cells(17, 9), Cells(26, 14)).Interior.ColorIndex = 0 Range(Cells(30, 9), Cells(39, 14)).Interior.ColorIndex = 0 k = Cells(5, 2) 'B5セルの値 For j = 9 To 14 For i = 17 To 26 For r = 30 To 39 If Abs(Cells(i, j).Value - Cells(r, j).Value) <= 0.05 Then Cells(r, j).Interior.Color = vbYellow Cells(i, j).Interior.Color = vbYellow End If Next  Next   Next End Sub 対象のIf Abs(Cells(i, j).Value - Cells(r, j).Value) <= 0.05 Then で、それぞれ見比べて、0.05以上のずれがあるとセルが塗りつぶされないというマクロなのですが これを、If Abs(Cells(i, j).Value - Cells(r, j).Value) = 0 Thenという条件も追加して その時はセルを青に塗りつぶし、逆に0.05以上のずれがあるセルは赤に塗りつぶす。 みたいなマクロを書きたいです。 If Abs(Cells(i, j).Value - Cells(r, j).Value) = 0 Thenは一度追加してみましたが 上手く機能しませんでした。 やりたい事 ・数値が動いているけど、0.05以内の時は黄色 ・数値変動が0の場合は青 ・数値変動が0.05以上の場合は赤 です。 宜しくお願いします。

  • 【ExcelVBA】セルに入力された値によって書式を変更する

    こんにちは。いつもお世話になっております。 標題の件で質問させて下さい。 セルに入力された値によって塗りつぶす色を変えるマクロを作成しています。 条件付き書式では、条件を3つしか指定できなかったので、マクロにて制御しようと思いました。 値の判定を行い、入力した各文字列の色で塗りつぶされるところは正常に動作しているのですが、 値が入っていてもいなくても、複数のセルを選択し、「Delete」キーを押下すると、背景色がグレーになってしまうのです。 初歩的な質問で申し訳ありませんが、どなたか上記のような動作をする理由をご教授頂けないでしょうか。 以下にソースを載せておきます。 宜しくお願い致します。 --- Private Sub Worksheet_Change(ByVal target As Range) On Error Resume Next If (target.Cells.Value = "グレー") Then target.Cells.Interior.ColorIndex = 15 ElseIf (target.Cells.Value = "イエロー") Then target.Cells.Interior.ColorIndex = 6 ElseIf (target.Cells.Value = "スカイブルー") Then target.Cells.Interior.ColorIndex = 33 ElseIf (target.Cells.Value = "ピンク") Then target.Cells.Interior.ColorIndex = 7 Else target.Cells.Interior.ColorIndex = 0 End If End Sub

  • エクセルマクロで複数列のセルを選択した時でも正しく動作するようにしたい

    エクセルマクロで複数列のセルを選択した時でも正しく動作するようにしたい。 今、3列目に入力された値によって15列から17列の値を自動入力するように次の マクロを作りました。 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Column <> 3 Then Exit Sub For Each r1 In Selection If r1.Cells(1, 1) <> "部品表" Then Cells(r1.Row, 15) = "-" Cells(r1.Row, 16) = "-" Cells(r1.Row, 17) = "-" End If Next End Sub 3列目のみのセルをペーストすると正しく動作しますが、1列目から3列目のセルにペーストすると何も動きません。 正しく動くようにするには、どう修正すればいいでしょうか?

専門家に質問してみよう