【问题标题】:Excel triple (multiple) VLOOKUP with a concatenated VLOOKUP value over two worksheetsExcel 三重(多个)VLOOKUP 与两个工作表上的串联 VLOOKUP 值
【发布时间】:2018-02-08 11:27:20
【问题描述】:

我想创建一个超过 2 个工作表的 VLOOKUP,并查看三个查找值,其中一个与中间的 - 连接。

基础数据太大,不能放在这里(30k 字符限制)所以这里是文件:

https://wetransfer.com/downloads/b475e4206e9b1c01519b4e6405fbf2f420180208112525/49c87b

在“转换”选项卡中,我尝试使用以下公式:

=INDEX(Data!D10:BB300,MATCH(A4&"-"&B3,INDEX(Data!D7:AO7,0)),MATCH(Transform!B2,Data!A11:B300,0))

但是得到#N/A,即使我已经将它指向了正确的单元格。

预期的输出也在文件中。

快速解释:

Data 选项卡中,我有一行日期,例如Jan-16Feb-16Mar-16

另外,在Data 选项卡中,我有一行包含ActualBudget

同样在Data 选项卡中,我有值Total Alpha

Transform 标签中,我将其布局如下:

_______________________
|Actual | Total Alpha | 
-----------------------
|       |16     |17   |
-----------------------
|Jan    |       |     |
----------------------- 
|Feb    |       |     |
-----------------------
|Mar    |       |     |
-----------------------
|Apr    |       |     |
-----------------------
|May    |       |     |
-----------------------
|Jun    |       |     |
-----------------------
|Jul    |       |     |
-----------------------
|Aug    |       |     |
-----------------------
|Sep    |       |     |
-----------------------
|Oct    |       |     |
-----------------------
|Nov    |       |     |
-----------------------
|Dec    |       |     |
-----------------------
|       |       |     |
-----------------------
|Budget |       |     |
-----------------------
|       |18     |     |
-----------------------
|Jan    |       |     |
-----------------------
|Feb    |       |     |
-----------------------
|Mar    |       |     |
-----------------------
|Apr    |       |     |
-----------------------
|May    |       |     |
-----------------------
|Jun    |       |     |
-----------------------
|Jul    |       |     |
-----------------------
|Aug    |       |     |
-----------------------
|Sep    |       |     |
-----------------------
|Oct    |       |     |
-----------------------
|Nov    |       |     |
-----------------------
|Dec    |       |     |
 ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ ̅ 

并使用三元组VLOOKUP 我希望能够查看(例如): Actual & Total Alpha & Nov & 17(使用类似 A4&"-"&B3 的东西来合并值,因为数据选项卡具有类似 Nov-17 的值)并在 Data 选项卡中找到相关值。

【问题讨论】:

  • MATCH 的第二个参数必须是数组,而不是矩阵。问题中公式的最后一部分:MATCH(Transform!B2,Data!A11:B300,0) 将返回#N/A,无论实际数据是什么,因为Data!A11:B300 不是数组。
  • 数组只是一个一维矩阵。例如。 A11:B11A11:A300 是数组,但 A11:B300 是矩阵。
  • @Matt 答案取决于在哪里可以找到Transform!B2。是在Data!A11:A300 还是Data!B11:B300 中找到并匹配?之后你应该调整你的公式。
  • A11:B300 最好作为其海量数据源,但 B11:B300 可能是一个选项(我已经尝试过这个 BTW 并且仍然得到 #N/A)
  • 马特,你的问题解决了吗?

标签: vba excel excel-formula vlookup


【解决方案1】:

在B4范围内放

=INDEX(Data!$A$1:$Z$22,MATCH(Transform!$B$2,Data!$A$1:$A$22,0),MATCH(DATEVALUE(Transform!$A4&Transform!B$3),Data!$1:$1,0))

拖动填充到 C15。

在B19放

=INDEX(Data!$AA$1:$AL$22,MATCH(Transform!$B$2,Data!$A$1:$A$22,0),MATCH(DATEVALUE(Transform!$A19&Transform!B$18),Data!$1:$1,0)-COLUMN(Data!Z1))

向下拖动至 B30。

这会索引一个查找范围,然后找到感兴趣的行(例如总 alpha)和列(日期)并返回相交值。

如果您想要不同的行,请更改 B2 中的值,例如总测试版

版本 2:Actual 和 Target 的动态查找 - 可以稍微整理一下

创建两个命名范围

Ctrl + F3 打开名称管理器,然后添加

名称:实际范围

参考:

=OFFSET(Data!$A$1,0,0,ROWS(Data!$1:$22),MATCH(Transform!$A$17,Data!$2$2,0)-1)

名称:BudgetRange

参考:

=OFFSET(Data!$A$1,0,MATCH(Transform!$A$17,Data!$2$2,0)-1, ROWS(Data!$1:$22),MATCH(Transform!$A$17,Data!$2$2,0))

然后在B4中拖到C15去填充:

=INDEX(ActualRange,MATCH(Transform!$B$2,Data!$A$1:$A$22,0),MATCH(DATEVALUE(Transform!$A4&Transform!B$3),Data!$1:$1,0)

然后在B19中拖到B30去填充:

=INDEX(BudgetRange,MATCH(Transform!$B$2,Data!$A$1:$A$22,0),MATCH(DATEVALUE(Transform!$A19&Transform!B$18),Data!$1:$1,0)+ROWS($A$19:$A19))

还有一些空间可以进一步减少当前在整行中设置的索引范围。

【讨论】:

  • 好答案。小建议:两个公式 - 将索引简化为 =INDEX(Data!$1:$100, 或所需的行数。对于B19 公式,还要删除-COLUMN(Data!Z1)(通过索引整行来处理,您已经匹配整行)
  • @chrisneilsen 谢谢。我习惯于索引整列。已更改为 A1:A22。确实,效率更高。回复:-COLUMN。我认为需要保留,除非我在将索引区域更改为 Data!$AA$1:$AL$22 时重新编写整个公式,但是,正如您所注意到的,我仍在为日期的整个第 1 行编制索引。所以我必须在索引区域开始之前删除列数。我移动了索引,因为预算数据从该列 AA 开始。所以更适合数据的布局。
  • @QHarr Phenomenal answer :) 我将在 3 小时内奖励赏金(当它允许我时)在我为我增加的数据集调整它之后完美工作!
  • @QHarr 实际上,这错过了查找,它不会动态查找 ActualBudget (A2 & A17 in Transform 选项卡查看 Data 中的第 2 行标签)
  • 否,因为在您提供的示例中这些是固定的。今天晚些时候我可以调整。这是一个简单的 IF "Actual" INDEX ......ELSE INDEX.......今晚我会修复它。
【解决方案2】:

这些 数组 公式应该可以满足您的需求。
必须使用 Ctrl + Shift + Enter 提交它们。

Transform!B4 应该是(将其复制到Transform!B4:C15 范围内的剩余单元格):

=INDEX(Data!$A$1:$AL$22,MATCH(Transform!$B$2,Data!$A$1:$A$22,0),MATCH(DATEVALUE($A4&" 1, "&B$3)&$A$2,Data!$A$1:$AL$1&Data!$A$2:$AL$2,0))


Transform!B19 应该是(将其复制到Transform!B19:B30 范围内的剩余单元格):

=INDEX(Data!$A$1:$AL$22,MATCH(Transform!$B$2,Data!$A$1:$A$22,0),MATCH(DATEVALUE($A19&" 1, "&B$18)&$A$17,Data!$A$1:$AL$1&Data!$A$2:$AL$2,0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多