Excel VBA Vlookup值的第二个最新数据

问题描述 投票:1回答:1

目前正在使用Vlookup处理Excel工作表。 Sheet 1中的我的参考表有一个数据列表及其日期,其名称定义为ProjectEntry。例如:

-----------------------------------
| Project No | ID |  Service Date |
|------------|----|---------------|
|     01     | A1 |   10/12/17    |
|     02     | B2 |   13/12/17    |
|     01     | A1 |   14/12/17    |
|     03     | C3 |   14/12/17    |
|     01     | A1 |   16/12/17    |
-----------------------------------

现在我在Sheet2中的Vlookup想要根据ID查找第二个最近的日期以获取最后的服务日期。例如,当我选择ID = 01时,Vlookup = 14/12/17。

对于Vlookup公式,我设法获得了第一个输入的服务日期(10/12/17):

=VLOOKUP(I7,ProjectEntry[[#All],[ID]:[Service Date]],2,FALSE) 

但我不知道如何获得A1最近的第二个日期。我应该在配方中添加什么才能使其有效?

excel vba excel-vba
1个回答
2
投票

我们不是寻找“倒数第二匹配”,而是寻找“第二高的匹配”,在这种情况下,使用LARGE函数的数组公式将返回您需要的内容。

如果您的示例数据在A2:C6中排列如下:

sample data

然后你可以使用这个数组公式返回ID = A1所在的“第二高日期”:

=LARGE(IF($B$2:$B$6="A1",$C$2:$C$6),2)

你的问题说你需要寻找ID = 01但这些是两个不同的专栏。如果您需要查找“Project No = 01”,那么您的数组公式将为:

=LARGE(IF($A$2:$A$6="01",$C$2:$C$6),2)

...这是假设Project No存储为文本。如果它实际上是一个数字(格式为前导零)那么你会使用:

=LARGE(IF($A$2:$A$6=1,$C$2:$C$6),2).

☆请记住,由于这些都是ARRAY FORMULAS,因此您需要在输入公式时指定;而不是使用ENTER,完成输入公式:

CTRL + SHIFT + ENTER


编辑:

为了澄清此方法是否有效,如果数据的排列方式如下:

example2

... ID = A1(或Project No = 1)应返回哪个值?

  • 倒数第二(2016-12-17)
  • 第二最近期的? (二零一四年十二月十七日)
© www.soinside.com 2019 - 2024. All rights reserved.