我写了如下所示的条件,它在行A中查找值“当前状态:”并将该行中的B值复制到其他工作表,如果没有找到“0”则放在单元格中,它可以工作精细。有时值“当前状态:”可能与A18位于不同的单元格中,它可能会显示在A16到A20的范围内,如何修改该代码以在范围内找到它并复制相应的值?
If ws.Range("A18") = "Current Status:" Then
.Range("V" & NewRow) = ws.Range("B18")
Else
.Range("V" & NewRow) = "0"
End If
答案 0 :(得分:2)
只需将代码置于For
循环中......或使用像Scotty建议的VLookup
。这基本上是一回事。 For
循环更灵活,但优化程度更低(VLookup
更快)。它们都以μs/ cell的分数运行。
For Each c In Range("A16:A20")
If c.Value2 = "Current Status:" Then
.Range("V" & NewRow) = c.Offset(0, 1)
Exit For
Else
.Range("V" & NewRow) = "0"
End If
Next
如果使用For
循环,这比上面的代码多一点,但结构更好......
'Define a value holder variable where it's scope makes sense
Dim NewValue As String
'... other code here ...
'Default: NewValue = ""
NewValue = ""
For Each c In Range("A16:A20")
If c.Value2 = "Current Status:" Then
NewValue = c.Offset(0, 1)
'Exit For is optional in this case. It matters if
'there are multiple matches... do you want first or last result?
Exit For
End If
Next
'Assign NewValue to cell
.Range("V" & NewRow) = NewValue
答案 1 :(得分:1)
使用Vlookup:
.Range("V" & NewRow) = "0"
On Error Resume Next
.Range("V" & NewRow) = Application.WorksheetFunction.VLookup("Current Status:", ws.Range("A:B"), 2, False)
On Error GoTo 0
这将在单元格中放置0,然后尝试将其替换为从vlookup返回的值。如果在"Current Status:"
的A列中找不到ws
,则会抛出错误并被忽略,并在单元格中留下0
。
如果找到该值,它将返回B列中的值并将其替换为0