如何在 VBA 中执行 3 部分 IF 语句?

How to do a 3-part IF statement in VBA?

'8
If Not IsEmpty(Range("A7")) And Range("C7") = "\" Then
    Range("W7") = "\"
ElseIf Not IsEmpty(Range("A7")) And Range("C7") <> "\" Then
    Range("W7") = "\L"
ElseIf IsEmpty(Range("A7")) Then
    Range("W7") = ""
End If

With Sheets("DL Data")
    .Range("W7:W" & .Cells(.Rows.Count, "A").End(xlUp).Row).Formula = "\L"
End With

我似乎无法弄清楚 WITH 部分,或者我可能完全不在 IF 语句上。我在这里要做的是:

IF A7 不为空且等于“\” THEN W7 等于“\” IF A7 不为空且不等于 "\" THEN W7 等于 "\L", 同样 IF A7 为空 THEN W7 等于空白

然后我希望它执行此操作以搜索列并给我适当的答案,在必要时插入空格,在必要时插入“\”并在必要时插入“\L”。

希望我在这里表达清楚,感谢您提前提供的所有帮助!

此致,

亚兹

如果你想 运行 它遍历整列,你需要将同一个 If 块嵌套到一个循环中:

With Sheets("DL Data")
For j = 7 To .Range("A7").End(xlDown).Row
    If .Range("A" & j) <> "" And .Range("C" & j) = "\" Then
        .Range("W" & j) = "\"
    ElseIf .Range("A" & j) <> "" And .Range("C" & j) <> "\" Then
        .Range("W" & j) = "\L"
    ElseIf .Range("A" & j) = "" Then
        .Range("W" & j) = ""
    End If
Next j
End With

警告 我已遵循您当前的实施;但是,如果您的列 "A" 之间可能有一些空单元格(这可以解释 ElseIf .Range("A" & j) = "" 的存在),请注意计数器 .Range("A7").End(xlDown).Row 会在第一个停止空单元格。您可能希望将计数器索引到始终填充的列(例如数据集的记录 ID)。

With只是一个缩写。

例如

With Sheets("DL Data")
    .Range("W7:W" & .Cells(.Rows.Count, "A").End(xlUp).Row).Formula = "\L"
End With

相当于

Sheets("DL Data").Range("W7:W" & Sheets("DL Data").Cells(Sheets("DL Data").Rows.Count, "A").End(xlUp).Row).Formula = "\L"

您需要一个循环才能将此条件应用于所有行,例如:

Dim i as Integer
For i = 7 To Sheets("DL Data").Range("A7").End(xlDown).Row
If Not IsEmpty(Range("A" & i)) And Range("C" & i) = "\" Then
    Range("W" & i) = "\"
ElseIf Not IsEmpty(Range("A" & i)) And Range("C" & i) <> "\" Then
    Range("W" & i) = "\L"
ElseIf IsEmpty(Range("A" & i)) Then
    Range("W" & i) = ""
End If
Next i

您的代码更新将根据您的公式更新 W 列。我稍微优化了 If 语句以减少它们的冗余。

此外,为了便于说明,我还包含了几个 With 块。

With Sheets("DL Data")
    Dim row As Long
    For row = 7 To .Cells(.Rows.Count, "A").End(xlUp).Row)

        With .Range("A" & row)
            ' IF A is empty THEN W equals blank
            If .Value = "" Then
                Range("W" & row).Value = ""

            ' IF A is not empty AND it equals "\" THEN W equals "\"
            If .Value = "\" Then
                Range("W" & row).Value = "\"

            ' IF A is not empty AND it does not equal "\" THEN W equals "\L"
            ' A is not empty (first condition checked above).
            ElseIf .Value <> "\"
                Range("W" & row).Value = "\L"

            End If
        End With

    Next
End With