将 vlookup 值分配给变量
Posted
技术标签:
【中文标题】将 vlookup 值分配给变量【英文标题】:assigning a vlookup value to a variable 【发布时间】:2016-10-10 16:00:36 【问题描述】:我没有将 vlookup 公式的结果添加到单元格,而是尝试仅将结果分配给变量但不起作用。
值为“September”,结果必须为 9,但我的 vba 代码在 Msgbox 中返回 0
Sub Test()
Dim TableName2 As Integer
TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)"
MsgBox (TableName2)
End Sub
我尝试将变量更改为字符串,Msgbox 显示“FALSE”
你能帮助我,让我知道我做错了什么吗? :(
【问题讨论】:
任何答案对您有用吗?该网站因反馈而蓬勃发展。如果任何工作,请通过单击答案的复选标记标记为正确。如果它们不起作用,请告诉我们出了什么问题,以便我们改进答案。 【参考方案1】:这都是错误的——让我解释一下:
TableName2 = FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)"
这是一个布尔表达式,它表示:
TableName2 = (FormulaR1C1 = "=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)")
FormulaR1C1
不是变量名,因此它将计算为空字符串或空数值,当与 VLOOKUP 公式字符串比较时,将在此赋值语句的右侧返回 False
值,即:
TableName2 = False
当False
被强制转换为整数值时(TableName2
被显式声明为整数,因此会发生隐式类型转换),结果是0
在您的MsgBox
语句中。
请尝试:
TableName2 = Application.Evaluate( _
Application.ConvertFormula( _
"=VLOOKUP(R19C9,Database!R1C8:R12C9,2,FALSE)", xlR1C1, xlA1))
如果搜索的值在数据库范围内不存在,这仍可能引发错误。
【讨论】:
【参考方案2】:你可以用这个:
Sub Test()
Dim TableName2 As Integer
On Error Resume Next
TableName2 = Application.WorksheetFunction.VLookup(ActiveSheet.Range("I19"), Worksheets("Database").Range("H1:I12"), 2, False)
On Error GoTo 0
If TableName2 = 0 Then
MsgBox "The month is mistyped as a match was not found"
Else
MsgBox (TableName2)
End If
End Sub
【讨论】:
以上是关于将 vlookup 值分配给变量的主要内容,如果未能解决你的问题,请参考以下文章