1

我已经尝试了几个小时的示例,但我不断收到#NAME 的相同错误?

我需要在 VBA 函数中使用 VLOOKUP,然后在将结果放入单元格之前处理结果。首先,我遇到了一个问题,只是为了让 VBA VLOOKUP 部分正常工作。

为了测试这里是详细信息电子表格是......

工作表 = Sheet1

4 行 x 2 列数据。单元 D1:E4 舞蹈:23 法语:42 英语:2 音乐:33

在单元格 A1 中,我将有一个用户估算的内容,该内容将来自 D 列的值,例如法语

在单元格 B1 中,我将调用函数 =GetQty(A1,D1:E4,2) 但我总是得到#NAME?

1)如何正确调用该函数。我这样做正确吗?

在我的 VBA 函数“GetQty”中,我只想对单元格 A1 的值执行 VLOOKUP 并从表中的匹配条目中返回值(单元格 D1:E4),例如返回 42,然后将该值放入列 B1 和(也是通过 VBA 的 C1 列,而不仅仅是在 =B1 的工作表单元格中使用公式)

这是我在函数中尝试的众多示例之一,只是为了让 VLOOKUP 工作。

Function GetQty(Celly As Range, CellyRange As Range, Colretval As Integer) As Integer
Dim result As String
Dim sheet As Worksheet
Set sheet = ActiveWorkbook.Sheets("Sheet1")
GetQty = Application.WorksheetFunction.VLookup(sheet.Range(CellyRange), sheet.Range(CellyTable), Colretval, False)
End Function

我尝试了很多例子,但我总是得到#NAME?错误

4

2 回答 2

2

有几个问题,主要是:

  • Vlookup 的第一个参数不能是范围,必须是值
  • 不将返回类型声明为 Integer 更安全

这是一个关于如何从 VBA 使用 Vlookup 的工作示例,也许它会有所帮助(你称它为 VLookup):

Function VBAVlookup(ByVal search As Variant, _
                    cell_range As Range, _
                    offset As Long, _
                    Optional opt As Boolean = False)

Dim result As Variant
result = WorksheetFunction.VLookup(search, cell_range, offset, opt)
'do some cool things to result

VBAVlookup = result

End Function

除非您正在做的事情相当复杂,否则您始终可以使用=Vlookup(...) * 55 +2 类似的东西来仅使用一个公式从 vlookup 返回操纵结果。

于 2011-12-14T13:15:42.067 回答
0

下面是获取列范围的示例:

Range("A2", Range("A2").End(xlDown)).Rows.Count

自定义您的方式,因此这可以帮助您通过您的范围。

于 2014-12-16T07:10:43.037 回答