我正在尝试根据某些条件替换列中的值。这是我的代码:
For i = .Rows.Count To 1 Step -1
If .Item(i) = "w" Or "x" Or "y" Or "z" Then
.Item(i) = "A"
End If
Next i
如果单元格中的值是w,x,y或z,则需要等于“ A”。如果我分别处理每个字符,则此循环有效,但是如何将这些条件组合在一起。
答案 0 :(得分:4)
有很多方法可以做到这一点,但是当您自己快要出现的时候,我将介绍最接近您的尝试的选项:
If .Item(i) = "w" Or .Item(i) = "x" Or .Item(i) = "y" Or .Item(i) = "z" Then
代替您现有的IF。这是使用Or
做出这些决定的正确方法。
或者,一种稍加修饰的方式(更易于扩展(和读取))将只是查找较长字符串中搜索项的出现。我已经用|
分隔符分隔了匹配项,以防该单元格包含例如xy
并且您不希望匹配。如果有可能在表中使用分隔符,则可能需要更改分隔符。
If InStr(1, "w|x|y|z", .Item(i), vbBinaryCompare) Then
如果您不希望区分大小写,请将vbBinaryCompare
更改为vbTextCompare
。
答案 1 :(得分:4)
选择大小写是我的首选方法
For i = .Rows.Count To 1 Step -1
Select Case .Item(i)
Case "w", "x", "y", "z"
.Item(i) = "A"
Case "something else"
'If you have other criteria
Case Else
'If you have a action item for something that isn't any of the above
End Select
Next i
答案 2 :(得分:2)
我倾向于为此使用数组输入;您可以轻松地更改数组,然后代码仍然可以使用。像这样:
Dim arr() As String: arr = Split("w,x,y,z", ",")
For i = .Rows.Count To 1 Step -1
For j = LBound(arr) To UBound(arr)
If .Item(i) = arr(j) Then .Item(i) = "A"
Next j
Next i
答案 3 :(得分:0)
Range.Replace method将很快执行此操作。
dim repl as variant, i as long
repl = array("w", "x", "y", "z")
for i = lbound(repl) to ubound(repl)
activesheet.range("A:A").replace what:=repl(i), replacement:="A", _
lookat:=xlwhole, matchcase:=False
next i