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

时间:2017-12-27 01:27:23

标签: excel vba excel-vba

目前正在使用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最近的第二个日期。我应该在公式中添加什么才能使其有效?

1 个答案:

答案 0 :(得分: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)

  • 第二most-的最近? (二零一四年十二月十七日)