首页 > 解决方案 > IF 语句未正确读取值

问题描述

我写了一个 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

标签: excelvbafor-loopif-statement

解决方案


而不是If/ElseIf/Else你应该使用Select Case.

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

    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

推荐阅读