●実現したいこと
・(え) の条件を満たすために、もし、列 Bの値が逆順へと変化した場合([例] 2番から1番へと変更)に、
ダイアログボックスで「ステータスを逆順に変更しようとしてます。よろしいですか?」と表示し、「YES」か「NO」の入力を促すようにしたい。
・「YES」が入力されたら、列 B の値を変更し、列 C の値日付をクリアする。
・「NO」が入力されたら、列 B の値を変更しない。
●お願いしたい事
・ソースコードを教えて頂きたいです。
▽1
●
a-kuma3 ●500ポイント ベストアンサー |
こんな感じでどうでしょうか。
Dim Before_B_Value As String Private Function IsSequentialStatus(Next_Value, Before_Value) n = CInt(Left(Next_Value, 1)) If Before_Value <> "" Then b = CInt(Left(Before_Value, 1)) Else b = -1 End If If b < n Then IsSequentialStatus = True ElseIf b > n Then IsSequentialStatus = False Else ' ここには来ないはず... Debug.Print "??? : n, b = " & n & ", " & b End If End Function Private Sub Worksheet_Change(ByVal Target As Range) If Target.Count = 1 Then If Target.Column = 2 Then ' B列が削除された場合の処理 If Target.Value = "" Then Before_B_Value = "" Debug.Print "B列が削除されたっ!" Exit Sub End If If IsSequentialStatus(Target.Value, Before_B_Value) Then If Target.Value = "2-値段調査完了" Then Cells(Target.Row, 3).Value = Date End If Else btn = MsgBox("ステータスを逆順に変更しようとしてます。よろしいですか?", vbYesNo, "確認") If btn = vbYes Then Cells(Target.Row, 3).Clear Else Application.EnableEvents = False Target.Value = Before_B_Value Application.EnableEvents = True End If End If Before_B_Value = Target.Value End If End If End Sub Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Count = 1 Then If Target.Column = 2 Then Before_B_Value = Target.Value End If End If End Sub
対象シートのコードのところに貼ってください。
質問にある Worksheet_Change の処理は入れてありますが、既に Worksheet_SelectionChange にも処理がある場合には、処理を追記してください。
B列で削除をしたときの仕様が分からなかったので、とりあえずエラーにならないようにだけしています。
削除を考慮するとしたら、範囲指定で削除される場合の考慮も必要になります(ちょっと面倒)。