@frswataru (本石 渉)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

VBA 条件分岐 下限値から上限値の範囲内であれば処理を実行

Q&A

Closed

解決したいこと

VBA 条件分岐_下限値から上限値の範囲内であれば処理を実行したいです
下限値から上限値以外の値を入力すると”やり直し”のメッセージを範囲内であれば”OK”と表示したいです。
image.png

解決方法を教えて下さい。

該当するソースコード

Private Sub Worksheet_Change_1(ByVal Target As Range)

If Target.Count > 1 Then End
    If Intersect(Target, Range("P5")) _
    Is Nothing Then Exit Sub
     Cancel = True
        With Target(1)
            If .Value <> "" And Cells(5, 19) < Target(1) < Cells(5.18) Then
          MsgBox "OK"
    Else
        MsgBox "やり直し" & Range("Q5") & "Nmで締める"
        Range("P5").Select
    End If
    End With
End Sub
0 likes

2Answer

行のインデントはきちんとそろえた方がいいです。特にこのコードは「End IfのないIf文」があるため非常にわかりづらくなっています。

今Excelのない環境なので確かめることができませんが、

'複数セル同時変更にも対応
Private Sub Worksheet_Change_1(ByVal Target As Range)
    For Each t In Target
        If Intersect(t, Range("P5:P9")) Is Nothing Then Continue For
        Cancel = True
        If t.Value <> "" And t.Value <= .Offset(0, 2).Value And t.Value >= t.Offset(0, 3).Value Then
            MsgBox "OK"
        Else
            MsgBox "やり直し" & t.Offset(0, 1).Value & "Nmで締める"
            t.Select
        End If
    Next
End Sub

でどうでしょうか

0Like

Comments

  1. @frswataru

    Questioner

    インテンドサボってすみません(。-人-。) ちなみにVBAは未だに自動インテンドのツールはないです。
    動作はしませんでした。変数のtのデータの型は何ですか?
  2. RangeからFor Eachで要素を取り出すと、1セル分のRangeオブジェクトを順番に取り出します。
    http://www.officetanaka.net/excel/vba/tips/tips111b.htm

    これによって、ペーストなどで複数セルをまとめて更新した場合もP5からP9の範囲の分はまとめてチェックすることが可能になります。
  3. あ、上限チェックの判定式でtが抜けて `t.Value <= .Offset(0, 2).Value`になっちゃってますね…
  4. @frswataru

    Questioner

    tはValueですね。
    お手数お掛けしました。本件はご放念ください。

Comments

  1. @frswataru

    Questioner

    Rangeですね、承知しました。

Your answer might help someone💌