【问题标题】:IF statement not reading the values properlyIF 语句未正确读取值
【发布时间】:2021-09-07 07:23:59
【问题描述】:

我编写了一个 IF 语句,它应该根据某些代码更新同一行中的某些值。但是,当 if 语句读取我的单元格时,它没有分配正确的逻辑。我尝试将列转换为数字,一般,反之亦然,它仍然不起作用。例如,值 309 应该默认为“CHECK”,但它在第一个 if 语句中被捕获,为什么会发生这种情况? PS-我也试过去掉数字周围的“”,还是不行。

Set rngVis = ws.Range("I2:I" & Lr).SpecialCells(xlCellTypeVisible)

For Each c In rngVis
    If c.Offset(0, 0).Value = "302" Or "304" Or "305" Or c.Offset(0, 0).Value = vbNullString Then
        c.Offset(0, 19).Value = "IAG-RoR"
        c.Offset(0, 25).Value = "BAD"
        c.EntireRow.Columns("A:AG").Interior.ColorIndex = 3
    ElseIf c.Offset(0, 0).Value = "303" Or "306" Or "307" Or "310" Then
        'Do nothing'
    Else
        c.Offset(0, 19).Value = "CHECK"
        c.Offset(0, 25).Value = "CHECK"
        c.EntireRow.Columns("A:AG").Interior.ColorIndex = 28
    End If
Next c

【问题讨论】:

  • a = b or c等同于a = b or a = c
  • 啊啊啊知道了!如果 c.Offset(0, 0).Value = "302" 或 c.Offset(0, 0).Value = "304" 或 c.Offset(0, 0).Value = "305"......等等!
  • @Socramvm Select Case 语句也可能满足您的需求,其中Case a Or b Or c 有效。

标签: excel vba for-loop if-statement


【解决方案1】:

您应该使用Select Case,而不是If/ElseIf/Else

这将简化事情并避免重复。

    Set rngVis = ws.Range("I2:I" & Lr).SpecialCells(xlCellTypeVisible)

    For Each c In rngVis
        Select Case c.Value
            Case "302", "304", "305", vbNullString
                c.Offset(0, 19).Value = "IAG-RoR"
                c.Offset(0, 25).Value = "BAD"
                c.EntireRow.Columns("A:AG").Interior.ColorIndex = 3
            Case "303", "306", "307", "310"
                'Do nothing'
            Case Else
                c.Offset(0, 19).Value = "CHECK"
                c.Offset(0, 25).Value = "CHECK"
                c.EntireRow.Columns("A:AG").Interior.ColorIndex = 28
        End Select
    Next c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-09-13
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 2019-08-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多