- ベストアンサー
VBAメッセージボックス表示後の処理について
- ExcelのVBAでシート1とシート2の値を比較し、変更がある場合はメッセージボックスを表示させたい。
- シート2に新しい値が入力された場合はそのまま残し、既存の情報が変更された場合は値を元に戻したい。
- For文とIf文を使用して、条件に基づいた処理を行うためのコードを教えてください。
- みんなの回答 (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)
>シート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)
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
補足
早速のご回答ありがとうございます。 しかし記載いただいた方法ではうまくいきませんでした。 メッセージボックス表示後にシート1=シート2としているので シート1に値が入っていないセルに対してシート2に値が入って いる場合はシート2の値がクリアされてしまいます。 シート1のセルがブランクかつシート2のセルに値がある場合、 シート2の値を残すにはどうすればよいでしょうか?