2

だから私はそれ(5)に整数値を持つセル(A2)を持っています。セルを見て、そのセルの値が 50000 より大きい場合は何かを実行し、値が 50000 未満の場合は何かを実行する switch ステートメントが必要です。

動作しないコードは次のとおりです。コード行に「オーバーフロー」と表示されますthreshold = 50000

    Private Sub Worksheet_Change(ByVal Target As Range)

    Application.ScreenUpdating = False

    Dim state As Integer
    Dim threshold As Integer

    threshold = 50000
    state = Sheet1.Range("A2").Value

    Select Case state
        Case state < threshold
            'Do something
            Debug.Print (state)
        Case Is >= threshold
            'Do something
            Debug.Print (state)
        End Select

End Sub

どうすればこれを修正できますか?

4

2 に答える 2

4

問題はここにあります:
Sheet1.Range.Value("$A$2")

使用してSelect Case

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim state As Integer
    state = CInt(Sheet1.Range("$A$2"))
    Select Case state
        Case Is > Target.Value
            Debug.Print "less than " & state
        Case Is < Target.Value
            Debug.Print "greater than " & state
        Case Else
            Debug.Print "Equals"
    End Select
End Sub

ifステートメントの使用

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim state As Integer
    state = CInt(Sheet1.Range("$A$2"))
    If Target.Value < state Then
        Debug.Print "less than " & state
    ElseIf Target.Value > state Then
        Debug.Print "greater than " & state
    Else
        Debug.Print "Equals"
    End If
End Sub

POST_EDIT:
50000 はデータ型には大きすぎるため、オーバーフローを避けるためにデータ型Integerとしてディメンション化しますLong

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim threshold As Long
    threshold = 50000
    Select Case Target.Value
        Case Is >= threshold
            Debug.Print "greater or equal " & threshold
        Case Is < Target.Value
            Debug.Print "smaller than " & threshold
        Case Else
            Debug.Print "Can't calculate! Error"
    End Select
End Sub
于 2013-06-06T11:11:20.050 に答える
2

Range ステートメントが間違っています

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.ScreenUpdating = False

    Dim state As Integer

    state = Sheet1.Range("A2").Value

    Select Case state
        Case Is < 5
            'Do something
            Debug.Print (state)
        Case Is > 5
            'Do something

        End Select

End Sub

state = 5の場合の対処方法について言及していませんか?

于 2013-06-06T11:03:07.033 に答える