【问题标题】:Two-Dimensional Lookup in Excel 2010Excel 2010 中的二维查找
【发布时间】:2012-01-08 07:30:26
【问题描述】:

我有一个与此类似的数据

表格包含多个行标签标题(堆叠行标签):

                     |20%     |30%  |
|25/01/11   |buy     |1       |1.1  |
|           |sell    |0.8     |0.9  |
|27/01/11   |buy     |1.02    |1.03 |
|           |sell    |1.1     |1.2  |
|01/02/11   |buy     |1.05    |1.07 |

我正在尝试使用查找公式来根据交易的日期和类型检索数据:说出 27/01/11 的 30% 卖出出价的乘数是多少 任何帮助我都会非常感激!

更新

必须有一个解决方案,而无需添加要查找的唯一列... Excel 2000 有一种方法可以通过使用自然语言公式来实现,正如您在本文中的方法 2 示例 2 中看到的那样 - support.microsoft.com/kb/275170

UPD 2

有可能吗?日期不仅会有间隔,还会跳过一两天......就像在示例中一样

UPD 3

目前发布的解决方案存在问题:

如果查找日期是 26/01/2011,则公式将返回 N/A(在完美的解决方案中,它应该返回最接近的匹配项(向下舍入到上一个日期) - 即,如果查找日期在列中不可用A 则应返回上一个最接近的日期)

堆叠行标题意味着我将行排列成这样的组(日期和类型是行标题)

【问题讨论】:

  • 该订单中的每个日期是否总是有一次买入和一次卖出?
  • 必须有一个解决方案,而无需添加要查找的唯一列... Excel 2000 有一种方法可以通过使用自然语言公式来做到这一点,正如您从本文的方法中看到的那样2、示例2——support.microsoft.com/kb/275170...
  • 至少已经发布了两个解决方案,它们不需要唯一的列并且可以准确地处理您示例中的数据。请接受这些答案之一或编辑您的问题以具体说明为什么这些解决方案不适用于您的实际数据。
  • 抱歉,我的问题一定描述得不清楚。主帖已更新。

标签: excel excel-formula lookup


【解决方案1】:

如果F1 包含所需日期,F2 %,F3“买入”或“卖出”

=INDEX($C:$D,MATCH(F1,$A:$A,0)+IF(F3="sell",1,0),MATCH(F2,$C$1:$D$1,0))

考虑所有三个因素

编辑

根据您的编辑,您只需将精确匹配参数从 0 更改为 1 即可。来自 Excel 帮助文件

Match_Type: 1 或省略 MATCH 查找小于或等于lookup_value 的最大值。 lookup_array 参数中的值必须按升序排列

所以公式变成了

=INDEX($C:$D,MATCH(F1,$A:$A,1)+IF(F3="sell",1,0),MATCH(F2,$C$1:$D$1,0))

另外,如果你想对 % 值做同样的事情,对另一个 MATCH 也做同样的事情

=INDEX($C:$D,MATCH(F1,$A:$A,1)+IF(F3="sell",1,0),MATCH(F2,$C$1:$D$1,1))

【讨论】:

  • 我喜欢....+1,当然,假设每个日期在“买入”之后都会有一个“卖出”。
  • 漂亮而优雅,但在我的情况下 A:A 包含间隙,即表格包含多个行标签标题(堆叠行标签),因此如果我请求 25/01/11 作为日期它将返回 N/A
  • @chrisneilson +1; Aleksy Napolskih:此解决方案可与您的问题中显示的表格准确配合。也许您可以发布数据的屏幕截图,以便我们查看确切的布局。
  • 我不明白你的问题。鉴于我的 MATCH 使用完全匹配(0 参数),任何间隙都无关紧要。 A:A 中的日期也是日期(日期序列号格式为日期或字符串?无论它们是什么,请确保您在 F2 中输入的值相同。“堆叠行标签”是什么意思
  • 抱歉,我的问题一定描述得不清楚。主帖已更新。
【解决方案2】:

假设您的数据从 A 列开始,并且您的查找日期在单元格 F1 中,请尝试以下操作:

=INDEX(D:D, MATCH(F1,A:A,0) + 1, 1)

这通过查找与日期匹配的行 (MATCH) 来工作,将其偏移 1 以获得卖出行,并使用 INDEX 函数从 D 列检索值。

【讨论】:

    【解决方案3】:

    假设您的值从 A1 开始。日期 25-01-2011 将在 A2,27/01 将在 A4 等。20%,将在 C1 和 30%,将在 D1

    在F1中输入你想要的查找日期,在G1中查找你想要的百分比(20或30%),在H1中查找你想要的类型(买入或卖出)

    在 I1 中输入以下表格。你有结果。

    =INDEX(C2:D6,IF(H1="buy",MATCH(F1,A2:A6,0),IF(H1="sell",MATCH(F1,A2:A6,0)+1)),MATCH(G1,C1:D1,0))
    

    【讨论】:

    • 谢谢,但这不起作用,因为查找日期会有间隙...即请求 25/01/11 作为日期将返回 N/A
    • @AlekseyNapolskih 你在日期中有空格吗?“25/01/11”,像这样,在 A 列中吗?是这个问题吗
    • 抱歉,我的问题一定描述得不清楚。主帖已更新。
    【解决方案4】:

    在这些情况下,我发现在数据左侧包含一个“关键”列会很有帮助,这可以大大简化公式。在数据左侧插入一列,并将其作为日期和买入/卖出的组合(A2 = B2 & "_" & C2):

                                       |20%     |30%  |
    25/01/11_buy  |25/01/11   |buy     |1       |1.1  |
    25/01/11_sell |           |sell    |0.8     |0.9  |
    27/01/11_buy  |27/01/11   |buy     |1.02    |1.03 |
    27/01/11_sell |           |sell    |1.1     |1.2  |
    01/02/11_buy  |01/02/11   |buy     |1.05    |1.07 |
    

    然后,只需做一个 vlookup + 匹配:

    =VLOOKUP({needed date and type}, A1:E6, MATCH({needed %}, A1:E1,0),0)
    

    这种方法的优点是公式简单易读

    【讨论】:

    • 谢谢,但这是最后的手段。我有一个巨大的查找表,用户将更新(复制和粘贴),因此我需要一个不涉及更改给定结构的解决方案...
    猜你喜欢
    • 2022-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-19
    • 2017-07-22
    • 1970-01-01
    相关资源
    最近更新 更多