如何在 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
'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