【发布时间】:2018-10-01 20:15:25
【问题描述】:
我在工作表摘要报告中的第 2 列循环,寻找一个值 0。
我正在使用嵌套的If 语句来确定第 1 列中的工具是债券还是商品或股票或外汇。
如果第 1 列中第 2 列中值 0 的符号对应于其中一个资产类别,并且该资产类别没有工作表,那么它应该为该资产类别创建一个新工作表。
On Error Resume Next
For i = 3 To SR.Cells(SR.Rows.Count, 2).End(xlUp).Row
If (SR.Cells(i, 2).Value <> 0) And _
((SR.Cells(i, 1).Value Like "*GER10YBond*") Or _
(SR.Cells(i, 1).Value Like "*Gilt10Y*") Or _
(SR.Cells(i, 1).Value Like "*JPN10yBond*") Or _
(SR.Cells(i, 1).Value Like "*US30YBond*")) Then
'Create new Worksheet named "Bonds"
ElseIf (SR.Cells(i, 2).Value <> 0) And ((SR.Cells(i, 2).Value Like "*#Corn*") Or _
(SR.Cells(i, 2).Value Like "*#NaturalGas*") Or _
(SR.Cells(i, 2).Value Like "*#Oil*") Or (SR.Cells(i, 2).Value Like "*#Wheat*") Or _
(SR.Cells(i, 2).Value Like "*#XAGUSD*") Or (SR.Cells(i, 2).Value Like "*#XAUUSD*") Or _
(SR.Cells(i, 2).Value Like "*Aluminium*") Or (SR.Cells(i, 2).Value Like "*BrentOil*") Or _
(SR.Cells(i, 2).Value Like "*Cocoa*") Or (SR.Cells(i, 2).Value Like "*Cocoa!*") Or _
(SR.Cells(i, 2).Value Like "*Cocoa!*") Or (SR.Cells(i, 2).Value Like "*Coffee*") Or _
(SR.Cells(i, 2).Value Like "*Coffee!*") Or (SR.Cells(i, 2).Value Like "*Coffee!*") Or _
(SR.Cells(i, 2).Value Like "*Copper*") Or (SR.Cells(i, 2).Value Like "*Corn*") Or _
(SR.Cells(i, 2).Value Like "*Corn!*") Or (SR.Cells(i, 2).Value Like "*Corn!*") Or _
(SR.Cells(i, 2).Value Like "*Cotton*") Or (SR.Cells(i, 2).Value Like "*Cotton!*") Or _
(SR.Cells(i, 2).Value Like "*NaturalGas*") Or (SR.Cells(i, 2).Value Like "*Oil*") Or _
(SR.Cells(i, 2).Value Like "*Palladium*") Or (SR.Cells(i, 2).Value Like "*Platinum*") Or _
(SR.Cells(i, 2).Value Like "*Rice*") Or (SR.Cells(i, 2).Value Like "*soybeans*") Or _
(SR.Cells(i, 2).Value Like "*Soybeans!*") Or (SR.Cells(i, 2).Value Like "*Soybeans!*") Or _
(SR.Cells(i, 2).Value Like "*Soybeans!*") Or (SR.Cells(i, 2).Value Like "*Wheat*") Or _
(SR.Cells(i, 2).Value Like "*Wheat!*") Or (SR.Cells(i, 2).Value Like "*Wheat!*") Or _
(SR.Cells(i, 2).Value Like "*XAGUSD*") Or (SR.Cells(i, 2).Value Like "*XAGUSD.*") Or _
(SR.Cells(i, 2).Value Like "*XAUUSD*") Or (SR.Cells(i, 2).Value Like "*XAUUSD.*")) Then
' Create new Worksheet named "Commodities"
End If
Next i
当循环从ElseIf 语句中找到一个资产,在第 2 列 0 中有一个值,它只是跳到 End If 并转到 Next Iteration。
为什么?
【问题讨论】:
-
你必须在某个地方有
On Error Resume Next,因为VBA中的条件表达式永远不会短路,所以整个表达式需要每次进行评估。考虑编写和使用short-circuiting function,一旦一个表达式为真,它就会退出。这些单元格是否包含错误值(例如#DIV/0!、#N/A、#VALUE!等)? -
"#" 用于与
Like运算符进行模式匹配。您需要将其括在括号内。 -
您确实需要为
SR.Cells(i, 2).Value提取一个局部变量,然后比较该变量,而不是点击工作表并每次迭代重新读取同一个单元格 40 次.. -
像这样嵌入在代码中的大检查列表很难维护 - 如果您将单词列表放入工作表中,您可以在单个操作中直接检查列表。
-
Dim foo As Variant;foo = SR.Cells(i, 2).Value??? ...你还在尝试吗?
标签: vba excel for-loop if-statement