【问题标题】:How to OFFSET a closed workbook alternative with Vlookup or Index & small如何使用 Vlookup 或 Index & small 抵消封闭的工作簿替代品
【发布时间】:2020-10-28 21:52:02
【问题描述】:

我有两本工作簿,其中一本我正在执行 Vlookup,另一本包含我需要从中检索信息的表。

我正在尝试基本上 Vlookup 在另一个工作簿“[Database_IRR 200-2S.xlsm]Changes”中找到的表!在第 3 行下方,因为有时查找会从第二行检索信息,而我不希望从表中获取这些参数。我无法在表的第三行开始 Vlookup 的原因是因为我的查找表可以输入数据(向下移动行),这会在我的 Vlookup 公式中移动表数组的绝对引用(参见示例下面):

例如,如果我输入 =VLOOKUP("TEST 1_SL.1V.L",'[Database_IRR 200-2S.xlsm]Changes'!$A$3:$FZ$10000,ROWS($A$1:$A6),FALSE) 并添加一个新条目/行(例如 A 列中的另一个测试 1_SL.1V.L)到具有查找表“[Database_IRR 200-2S. xlsm]Changes' 然后我的公式变成=VLOOKUP("TEST 1_SL.1V.L",OFFSET(('[Database_IRR 200-2S.xlsm]Changes'!$A$4:$FZ$10000),2,0),ROWS($A$1:$A6),FALSE). 注意$A$3 --> $A$4

为了解决这个问题,我尝试从第 1 行进行 Vlookup 并将其向下偏移 2 行,因为当向工作簿添加新行时,绝对引用(下面的 $A$1)似乎不会改变绝对引用位于 OFFSET 函数内(因此,当将新数据条目(新行)添加到 [Database_IRR 200-2S.xlsm]Changes 时,$A$1 不会更改为 $A$2)。现在,下面的这个公式仅在我打开查找表的来源的另一个工作簿时才有效,即 [Database_IRR 200-2S.xlsm]Changes'! , 如果我关闭它,那么我的 Vlookup 公式将返回 #VALUE 错误,因为我引用的工作簿已关闭,因此 OFFSET 会产生 #VALUE 错误

我的问题:我是否可以对我的代码进行任何调整或建议,以替换我的 OFFSET 函数在我关闭其他工作簿时不起作用或者可能是其他方法?

这是我使用的公式:

=VLOOKUP('Operation base Q'!$H$5,OFFSET(('[Database_IRR 200-2S.xlsm]Changes'!$A$1:$FZ$1000),2,0),ROWS($A$1:$A6),FALSE)

这是从文件路径“[Database_IRR 200-2S.xlsm]Changes”中查找数据的屏幕截图:

另一种替代解决方案我正在尝试使用带有小数组的索引公式(输入数组时按住 Ctrl+Shift+Enter)。该数组使我的工作表非常慢,并且如果第二行未填充查找值,它将不会获取“第一个”查找值(如第三行及以下)(请参见下面的工作簿截图Database_IRR 200-2S.xlsm]Changes'! 在我查找 TEST 1 时第二行不同,所以当我希望它返回第三行时,我的公式返回第四行。

这是我用于此替代方案的公式:

=INDEX(INDEX('[Database_IRR 200-2S.xlsm]Changes'!$A$2:$FZ$10001,0,ROWS($1:6)),SMALL(IF('Operation base Q'!$H$5='[Database_IRR 200-2S.xlsm]Changes'!$A:$A,ROW('[Database_IRR 200-2S.xlsm]Changes'!$A:$A),""),1))*

第三种解决方案我尝试使用的是 Double INDEX & MATCH 组合,但是每当我向另一个工作簿添加新行时,绝对引用也会发生变化,这就是我的意思:

这是我尝试使用的公式(第三种选择):

=INDEX(INDEX('[Database_IRR 200-2S.xlsm]Changes'!**$A$3:$FZ$10000**,0,ROWS($1:6)),MATCH('Operation base Q'!$H$5,'[Database_IRR 200-2S.xlsm]Changes'!**$A$3:$A$1000**,0))

但是每当我在 Database_IRR 200-2s 工作簿中插入一个新行时,绝对引用就会像这样改变(见粗体):

=INDEX(INDEX('[Database_IRR 200-2S.xlsm]Changes'!**$A$4:$FZ$10001**,0,ROWS($1:6)),MATCH('Operation base Q'!$H$5,'[Database_IRR 200-2S.xlsm]Changes'!**$A$4:$A$1001**,0))

交叉引用我发表的另一篇文章:https://www.mrexcel.com/board/threads/vlookup-offset-value-error.1139372/

【问题讨论】:

    标签: arrays excel indexing vlookup offset


    【解决方案1】:

    VLOOKUP 函数中将SUMPRODUCT 替换为OFFSET,试试这个:

    =SUMPRODUCT(('[Database_IRR 200-2S.xlsm]Changes'!$A$3:$A$1000='Operation base Q'!$H$5)*'[Database_IRR 200-2S.xlsm]Changes'!$A$3:$FZ$10000)
    

    【讨论】:

    • 我已将=VLOOKUP('Operation base Q'!$H$5,OFFSET(('[Database_IRR 200-2S.xlsm]Changes'!$A$1:$FZ$1000),2,0),ROWS($A$1:$A6),FALSE)Offset 部分替换为您的SUMPRODUCT 建议,但它似乎不太有效,这就是我所拥有的,请您纠正我:@987654328 @
    • 您可以将 VLOOKUP 替换为 SUMPRODUCT 如下 SUMPRODUCT = (range1 = criteria1 * range2 = criteria2 * table array)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-03
    相关资源
    最近更新 更多