【问题标题】:Excel VBA - referring to named range in ActiveCell.Formula within match lookup arrayExcel VBA - 在匹配查找数组中引用 ActiveCell.Formula 中的命名范围
【发布时间】:2014-09-15 01:48:53
【问题描述】:

我试图在活动单元格公式中引用匹配函数的查找数组部分中的命名范围。它需要是一个命名范围(据我所知),因为我稍后将在多个选项卡上运行代码,并且在每个选项卡上,包含数据的单元格数量以形成 AJ2 列中的查找数组将有所不同如果您在还包含空单元格的列上运行它,则 size 和 match 函数将不起作用。这是我目前的代码,我收到“对象范围的方法公式失败”错误。这绝对是导致它的匹配位,因为当我进入单元格并手动更改它以直接引用数组中的单元格时,它工作正常,但我不能这样做,因为它需要经过验证才能在多个选项卡上运行并且每个查找数组的长度都会发生变化:

Sheets("1").Select
Dim rangeh As Range
Set rangeh = Range("AJ2")
Set rangeh = Range(rangeh, rangeh.End(xlDown))

Sheets("1").Select
Range("R2").Select
ActiveCell.Formula = "=VLOOKUP(INDIRECT(""AJ""&(MATCH(Q2, & rangeh & ,-1)+1)),AI:AK,3,FALSE)"

它还必须是一个 ActiveCell.Formula,因为 R2 本身会在每个选项卡上被拖到不同的位置,具体取决于相邻列 Q 中的数据长度。

任何帮助表示赞赏。谢谢!

【问题讨论】:

    标签: arrays vba excel


    【解决方案1】:

    在 MATCH() 中用作 [match_type] 参数的 -1 与我有关,因为它不应该用于未排序的数据,但您提到可能存在空白单元格。具体来说,使用 -1 作为 [match_type] 假定数据按降序排序。需要稍微澄清一下 AJ 列中数据的确切性质。

    我还认为,在使用 VBA 中的字符串连接构造 VLOOKUP() 时使用 INDIRECT() 可能会更好。我在某些时候猜到了,但这就是我想出的。

    Dim rangeh As Range, rngQ As Range, w As Long, vWSs As Variant
    vWSs = Array("1","2")
    For w = LBound(vWSs) To UBound(vWSs)
        With Sheets(vWSs(w))
            Set rngQ = .Cells(2, 17).Resize(.Cells(Rows.Count, 17).End(xlUp).Row - 1, 1)
            Set rangeh = .Range(.Range("AJ2"), .Range("AJ2").End(xlDown))
            .Cells(2, 18).Formula = _
              "=VLOOKUP(INDIRECT(""AJ""&(MATCH(Q2," & rangeh.Address & ",-1)+1)),AI:AK,3,FALSE)"
            .Cells(2, 18).Resize(rngQ.Rows.Count, 1).FillDown
        End With
    Next w
    Set rangeh = Nothing
    Set rngQ = Nothing
    

    顺便说一句,实际上应该有一个按字面意思命名为 1 的工作表。如果 1 是作为工作表索引号的,那么它不应该用引号引起来。

    我已经更正了一些代码,将 .Address 添加到 MATCH() 中的 rangeh 并循环遍历名为 1 和 2 的工作表。您应该能够将工作表名称添加到 Array(...) 以增加循环。

    【讨论】:

    • 抱歉,没有正确解释。数据实际上是按降序排列的。我指的是空单元格的意思是,当只有某些单元格(比如 AJ2:AJ17 或其他)实际包含数据(我已经编程为按匹配 -1 要求的降序排列)。是的,实际上有一张名为“1”的工作表,我现在正在对其进行测试,但稍后我将为一堆工作表运行它,因此“1”将被“i”或其他任何内容替换,每个其中 AJ 和 Q 的长度不同。
    猜你喜欢
    • 1970-01-01
    • 2019-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2017-10-01
    相关资源
    最近更新 更多