簡體   English   中英

將vlookup結果傳遞給vba中的數組變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM