VBA如果条件

时间:2017-10-11 13:13:22

标签: excel-vba if-statement vba excel

我写了如下所示的条件,它在行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

2 个答案:

答案 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