为什么VBA中的VLookup因运行时错误1004而失败?

时间:2012-06-15 17:43:25

标签: vba excel-2007 vlookup

电子表格“Sheet3”如下所示:

            S&P 500         DJIA

 1/1/1991   795.4476    2973.09

 1/2/1991   786.3856    2947.1

  1/3/1991  775.4636    2905.19

  1/4/1991  773.5364    2896.8

  1/7/1991  760.2996    2847.9

  1/8/1991  759.0029    2832.81

  1/9/1991  750.8416    2788.67

  1/10/1991 758.1719    2820.8

细胞“F2”实际上是1/7/1991细胞的复制和粘贴。

VBA代码如下所示:

Sub badlook3()

Dim BenchSI As Variant
Dim BRange As Range
Dim SIDate As Date


Set BRange = Worksheets("Sheet3").Range("A2:C9")  

MsgBox BRange.Address

SIDate = Worksheets("Sheet3").Range("F2").Value


BenchSI = Application.WorksheetFunction.VLookup(SIDate, BRange, 2, True)


End Sub

我收到“无法获取WorkSheet Function类的VLOOKUP属性”错误。

我在这里缺少什么? A列的顺序正确。他们是约会。 Excel想从我这里得到什么?

2 个答案:

答案 0 :(得分:3)

问题在于使用SIDate作为日期(Visual Basic日期类型)
我的猜测是视觉基本日期类型和excel日期类型不匹配,这就是你收到错误的原因

而是将SIDate声明为范围,并且它将起作用

以下是代码:

Sub badlook3()

   Dim BenchSI As Variant 
   Dim BRange As Range 
   Dim SIDate As Range

   Set BRange = Worksheets("Sheet3").Range("A2:C9")      
   MsgBox BRange.Address

   Set SIDate = Worksheets("Sheet3").Range("F2")    
   BenchSI = Application.WorksheetFunction.VLookup(SIDate, BRange, 2, True)

End Sub

答案 1 :(得分:2)

您要求vLookup返回2列范围,而不是1列范围。更改BRange =“A2:B9”以使您的vLookup获得S& P值。

或者,您可以将范围更改为A2:C9并在vLookup中将2更改为3并获得DJ平均值。

简而言之,vLookup只能返回一个范围内最大列数的列引用。它可以在3列范围内返回第1,第2,第3列参考,但不能返回第4列,因为没有第4列。