• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA メッセージボックス表示後の処理について)

VBAメッセージボックス表示後の処理について

このQ&Aのポイント
  • ExcelのVBAでシート1とシート2の値を比較し、変更がある場合はメッセージボックスを表示させたい。
  • シート2に新しい値が入力された場合はそのまま残し、既存の情報が変更された場合は値を元に戻したい。
  • For文とIf文を使用して、条件に基づいた処理を行うためのコードを教えてください。

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

  • ベストアンサー
  • googoo900
  • ベストアンサー率44% (82/184)
回答No.3

回答します。 For i = 1 to EndRow If worksheets("シート1").cells(i,1).value<>worksheets("シート2").cells(i,1).value and worksheets("シート1").cells(i,1).value <> "" 『ア:不要 and worksheets("シート2").value <> ""』 then msgbox "既存情報は変更できません" vbOKOnly 『イ:追加 Worksheets("Sheet2").Cells(i, 1).Value = Worksheets("Sheet1").Cells(i, 1).Value』 ア:不要 検出しないといけないのは、シート1≠シート2となるセル かつ シート1に記載があるもの。シート1≠シート2でシート1がブランクセルの場合は新規追加なので検出する必要はありません。 イ:追加 シート2でシート1と違っているセルは、シート1と同じ内容に戻します ※エディタに転記する際は『』とア、イは削除ください。

その他の回答 (2)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.2

>シート1のセルがブランクかつシート2のセルに値がある場合、 >シート2の値を残すにはどうすればよいでしょうか? If Worksheets("シート1").Cells(i, 1).Value = "" And _   Worksheets("シート2").Cells(i, 1).Value <> "" Then   '新規追加(シート1がブランクのセルに対してシート2に値が入っている)   'の場合は値を残したままにしたいです。   '何もしない 上記の条件だと、何もしない(すなわちシート2の値は残ったまま)になっていますけど もしくは、ここに『値を残したまま・・』の処理を書かれては

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.1

For i = i To EndRow   If Worksheets("シート1").Cells(i, 1).Value = "" And _     Worksheets("シート2").Cells(i, 1).Value <> "" Then     '新規追加(シート1がブランクのセルに対してシート2に値が入っている)     'の場合は値を残したままにしたいです。     '何もしない   ElseIf Worksheets("シート1").Cells(i, 1).Value <> _     Worksheets("シート2").Cells(i, 1).Value And _       Worksheets("シート1").Cells(i, 1).Value <> "" And _       Worksheets("シート2").Cells(i, 1).Value <> "" Then     MsgBox "既存情報は変更できません", vbOKOnly   Else     '上記条件以外は     'シート2のA列の情報を変更(または追加や削除)をするとします。     Worksheets("シート2").Cells(i, 1).Value = _       Worksheets("シート1").Cells(i, 1).Value   End If Next

bz0715
質問者

補足

早速のご回答ありがとうございます。 しかし記載いただいた方法ではうまくいきませんでした。 メッセージボックス表示後にシート1=シート2としているので シート1に値が入っていないセルに対してシート2に値が入って いる場合はシート2の値がクリアされてしまいます。 シート1のセルがブランクかつシート2のセルに値がある場合、 シート2の値を残すにはどうすればよいでしょうか?