2016-08-01 54 views
2

我想知道是否有办法告诉excel如果VLookup函数找不到任何东西时不显示一些变量。VBA函数告诉机器不要显示某些变量

这里粗略地说明了我的代码的作用:通过查看另一个excel工作簿中的一些数字,比较上一年的值并采取差异,在另一个电子表格中显示差异,全部在一个大合并单元格中显示。 从我的代码的一些摘录:

cashO = Val(Application.VLookup("cash" & "*", Workbooks("creditreport.csv").ActiveSheet.Range("A1:F199"), 4, False)) 

那么差cash = Round(cashN - cashO, 0)

则显示:MergedCell.Value = "Cash increased by" & cash

,但我不想显示的现金,如果它无法找到现金摆在首位(如果这是这种情况,当无法找到现金和变化为空时,现金= 0)。

我正在考虑用我所有的变量(现金,...)创建一个数组,然后通过它循环。但我找不到任何网上的“如果没有发现不显示任何东西”。

最佳,

回答

1

您可以使用if else语句来检查的现金价值和写入值,如果现金有一个值和一些其他的消息,如“没有变化”或“没有以前的值”如果是这样的案件。

if cash = 0 
    MergedCell.Value = "No Change" 
Else 
    MergedCell.Value = "Cash increased by" & cash 
End If 
0

我希望我理解你,那你的意思是VLookup没有找到“现金”的匹配,如果这是你需要的错误处理的情况。 如果是这样的话,试试下面的代码:

Sub VLookup_Test() 

On Error Resume Next  
cashO = Val(Application.VLookup("cash" & "*", Workbooks("creditreport.csv").ActiveSheet.Range("A1:F199"), 4, False)) 
If Err.Number <> 0 Then 
    MsgBox "cashO not found" ' 
    ' Do your actions if cashO not found with VLookup 

End If 
On Error GoTo 0 

End Sub 
1

或者你可以只检查是否函数返回一个错误:

if iserror(Application.VLookup("cash" & "*", Workbooks("creditreport.csv").ActiveSheet.Range("A1:F199"), 4, False)) then 
    cash = 0 
else 
    cashO = Val(iserror(Application.VLookup("cash" & "*", Workbooks("creditreport.csv").ActiveSheet.Range("A1:F199"), 4, False)) 

    ....other statements for whatever... 
end if 
+0

谢谢您的回答!如果我不希望vba在其他文档中找不到vba,那么我相信我需要用'cash =“''''' – lo1ngru

+0

这些行来代替你的'cash = 0'建议避免使用相同变量的混合数据类型 - 即我猜你已将现金定义为整数或其他数字类型。 “”是一个空字符串,不是数字。如果您不想仅处理If语句中的输出,但稍后再执行此操作,则可能有一个布尔型CashExists,并且在“cash = 0”和“cashExists = True”的地方有“cashExists = False”其他部分。然后,在if之后,您可以执行“如果cashExists然后.... else ..... end if”在稍后的代码中将输出格式化。 – area9

相关问题