首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >VBA若条件

VBA若条件
EN

Stack Overflow用户
提问于 2017-10-11 13:13:22
回答 2查看 50关注 0票数 0

我编写了下面显示的条件,它查找A行中的值“当前状态:”并将B值从该行复制到其他工作表,如果找不到"0“放置在单元格中,则可以正常工作。有时值“当前状态:”可能位于与A18不同的单元格中,它可能出现在从A16到A20的范围内,我如何修改该代码以在范围内找到它并复制相应的值?

代码语言:javascript
运行
复制
If ws.Range("A18") = "Current Status:" Then
    .Range("V" & NewRow) = ws.Range("B18")
     Else
        .Range("V" & NewRow) = "0"
      End If
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-10-11 13:23:32

只要把你的代码放在一个For循环中..。或者像斯科蒂建议的那样使用VLookup。基本上是一样的。For循环更灵活,但优化程度较低(VLookup更快)。它们都是按照μs/cell的分数顺序运行的。

代码语言:javascript
运行
复制
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循环,这会比上面的代码多一点,但是结构更好.

代码语言:javascript
运行
复制
'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
票数 2
EN

Stack Overflow用户

发布于 2017-10-11 13:16:49

使用Vlookup:

代码语言:javascript
运行
复制
.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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46689164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档