[英]Pass vlookup result to array variable in vba
我在工作表“ LutSht”上有一個名為“ LUT”的表,如下所示:
A 1 2 3
B 4 5 6
C 7 8 9
在第二個工作表“ CalSht”中,單元格A1包含一個從“ LUT”的第一列生成的下拉列表
當我記錄宏以了解vlookup如何在VBA中運行時,它會產生:
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-1],LUT,2,)"
在這種情況下,查找到的值將被寫入單元格。 我正在嘗試將其傳遞給數組變量。
這是我有缺陷的代碼:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim x(3) As Double
Dim i As Integer
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
For i = 1 To 3
x(i)=VLOOKUP(RC[-1],LUT,i+1,)
'Line kept simple, but myriad of alternatives were tested unsuccessfully
Next
End If
End Sub
到目前為止,我所有糾正語法的嘗試都失敗了。 你能幫忙嗎?
正如Scott所指出的,您尚未初始化Table/ListObject
變量。 這未經測試,但我認為它將起作用:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim loLUT as Excel.ListObject
Dim x(3) As Double
Dim i As Integer
Set loLUT = me.ListObjects("LUT")
If Not Intersect(Target, Me.Range("A1")) Is Nothing Then
For i = 1 To 3
x(i)=VLOOKUP(RC[-1],LUT,i+1,)
'Line kept simple, but myriad of alternatives were tested unsuccessfully
Next
End If
End Sub
請記住使用Option Explicit
強制自己聲明變量。
假設LUT是一個命名范圍:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim arrResults() As Variant
Dim i As Long
If Not Intersect(Me.Range("A1"), Target) Is Nothing Then
ReDim arrResults(1 To [COLUMNS(LUT)] - 1)
For i = 1 To UBound(arrResults)
arrResults(i) = Evaluate("VLOOKUP(A1,LUT," & i + 1 & ",TRUE)")
Next i
'Do something with your array here
MsgBox Join(arrResults, ", ")
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.