2

スプレッドシート「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」は文字通り1991年1月7日のセルのコピーアンドペーストです。

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

「WorkSheetFunctionクラスのVLOOKUPプロパティを取得できません」というエラーが発生します。

ここで何が欠けていますか?列Aは正しい順序です。日付です。Excelは私に何を求めていますか?

4

2 に答える 2

3

問題は、SIDateをDate(Visual Basicの日付タイプ)として使用
することです。私の推測では、VisualBasicの日付タイプと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
于 2012-06-15T18:33:10.933 に答える
2

1列の範囲に対して2列の範囲で戻るようにvLookupに要求しています。BRange = "A2:B9"を変更して、vLookupがS&P値を取得するようにします。

または、範囲をA2:C9に変更し、vLookupで2を3に変更して、DJ平均を取得することもできます。

つまり、vLookupは、範囲内の最大数の列への列参照のみを返すことができます。3列の範囲で1番目、2番目、0r 3番目の列参照を返すことはできますが、4番目の列がないため、4番目は返すことができません。

于 2012-06-15T17:50:31.477 に答える