【问题标题】:VLookup from Last Column in Range VBA从范围 VBA 中的最后一列 VLookup
【发布时间】:2021-11-12 07:31:42
【问题描述】:

我正在尝试编写 VBA,它将 VLookup 信息从不同工作表上的数组中返回并返回。问题是,我的代码需要从范围的最后一列中查找信息,但是由于范围是数据透视表并且列是积压的月份,因此列数可能会有所不同。 VBA 成功地将代码放入目标单元格,但它得到一个#NAME?错误,所以我相信的对象声明有些混乱。有人可以帮忙吗?

Sub VLookupLastColumn()

Dim Row7 As Long
Dim Column1 As Long
Dim myTableArray As Range


Sheets("Pivot Values").Select
Row7 = Range("A" & Rows.Count).End(xlUp).Row
Column1 = Range("A" & Columns.Count).End(xlToLeft).Column
With ActiveSheet
    Set myTableArray = .Range(.Cells(1, 1), .Cells(Row7, Column1))
End With

Sheets("Output").Select
Range("BD5").Select
ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[-55],myTableArray,Column1,0)"

【问题讨论】:

    标签: excel vba vlookup


    【解决方案1】:

    试试这样的:

    Sub VLookupLastColumn()
    
        Dim Row7 As Long, Column1 As Long
        Dim myTableArray As Range, ws As Worksheet
        
        Set ws = Sheets("Pivot Values") 'use a worksheet variable
        
        Row7 = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
        Column1 = ws.Cells(1, Columns.Count).End(xlToLeft).Column
        Set myTableArray = ws.Range(ws.Cells(1, 1), ws.Cells(Row7, Column1))
        
        'add countif starting at row 7
        ws.Range(ws.Cells(7, Column1 + 1), ws.Cells(Row7, Column1 + 1)).Formula = _
             "=COUNTIF(B7:" & ws.Cells(7, Column1).Address(False, False) & ","">0"")"
        
        With Sheets("Output").Range("BD5")
            .Formula = "=VLOOKUP(" & .Offset(0, -55).Address(False, False) & "," & _
                                 ExtAddress(myTableArray) & "," & Column1 & ",FALSE)"
        End With
    
    End Sub
    
    'return a range address, including the worksheet name
    Function ExtAddress(rng As Range)
        ExtAddress = "'" & rng.Parent.Name & "'!" & rng.Address()
    End Function
    
    

    【讨论】:

    • 这个工作,找到最后一行和最后一列工作,我的表格数组是成功的,这只是从“输出”表中拉出 VLookup,而它应该从“枢轴值”中拉出 VLookup床单。我将如何调整它以便从“Pivot Values”表中提取 VLookup?
    • 我的错 - 我忘记将工作表名称添加到 myTableArray 的地址中。请参阅上面的更新
    • 感谢修复!现在,一个后续问题,我想从第一个可用列的第 8 行开始添加一个 =CountIf() 列,因此 Column1 的 n+1 列,这样该列计数 B 列中的所有非零出现-Column1 减 1,所以如果发现 Column1 是 E 列,那将是 B-D 列中出现非零的 =CountIf(),然后经过 Row7,你能想出一种方法来实现这一点吗?我是 VBA 的新手,非常感谢您的任何尝试!
    • 见上文 - 未经测试,但应该可以帮助您入门。
    猜你喜欢
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-10
    • 1970-01-01
    • 1970-01-01
    • 2017-05-12
    • 1970-01-01
    相关资源
    最近更新 更多