VLOOKUP来填充Excel表格

我在编写VLOOKUP来sorting一些数据时遇到了麻烦。

我有一个表的数据看起来像这样:

MarkAsOfDate MaturityDate ZeroRate 05-May-15 05-May-15 0.006999933 05-May-15 06-May-15 0.006999933 05-May-15 05-Jun-15 0.008996562 05-May-15 06-Jul-15 0.008993128 ... .... 

我想用第一列和第二列中的date间隔恰好是一个月(例如05 – 5月 – 15日和05 – 15 – 15日)以及没有这种值的空白的情况制作一个表格。

所以我做了第二个表格,如下所示:

 MarkAsofDate MaturityDate Zero Rate 1M 5-May-15 5-Jun-15 6-May-15 6-Jun-15 7-May-15 7-Jun-15 8-May-15 8-Jun-15 9-May-15 9-Jun-15 .... .... 

我想使用第一个表中的数据来填充这个表。 我试图写一个VLOOKUP,但我不知道如何做两列而不是一个。

提前致谢。

Vlookup有一些限制,正如你开始看到的。 另一个build议是索引/匹配 。 在你的第二个表中使用这个。

注意:我假设你的上表是在Sheet1 。 把它放在你的C2中,在第二个表(在“Zero Rate 1M”标题下):

=Index(Sheet1!$C:$C,match(A2&B2,Sheet1!$A:$A&Sheet1!$B:$B,0))然后按CTRL+SHIFT+ENTER.

有很多方法可以做到这一点 – 如果您的数据首先被MarkAsofDatesorting,然后到达成熟date,最简单的方法就是在您的原始数据选项卡上添加一个帮助列 – 比方说E列。在E列中,开始在E2并复制下来,键入[假设MarkAsofDate是A列和MaturityDate列E]:

 =IF(MONTH(B1)-MONTH(A1)=1,A1,"") 

对于在MarkAsOfDate后1个月具有MaturityDate的每个项目,此列将显示MarkAsOfDate; 对于所有其他行将显示“”。

在您的特殊数据结果选项卡中,使用MATCH函数查找与您当前行的MarkAsOfDate匹配的列E中的行。 我们还将使用INDEX函数返回C列中该行的值。假设您的第一张包含原始数据的工作表是sheet1,而您的特殊数据结果位于工作表2中,请在工作表2上将其input到E2中,然后向下拖动:

 =INDEX(Sheet1!C:C,MATCH(A2,Sheet1!A:A,0)) 

另一种select(除了BruceWayne推荐的Array Formula)将使用OFFSET函数。 OFFSET根据起始点创build一个新的范围,将给定高度和宽度的一些单元格移动到右/左/上/下。 在这种情况下,我们首先使用MATCH来查找Sheet1上的MarkAsOfDate与Sheet2匹配的第一次。 我们将使用该信息和OFFSET函数来创build一个新的范围,从那里开始,并在数据的底部结束,如下所示:

 =OFFSET(Sheet1!A1,MATCH(A2,Sheet1!A:A,0),1,COUNT(Sheet1!C:C),2) 

那么我们只需要在我们上面创build的范围上使用VLOOKUP,就像这样:

 =VLOOKUP(B2,OFFSET(Sheet1!A1,MATCH(A2,Sheet1!A:A,0),1,COUNT(Sheet1!C:C),2),0) 

第二种方法避免了需要一个帮助列,但是如果你的行/列发生改变(因为我们必须在OFFSET函数中硬编码一些东西),它会更加复杂,并且容易出错。 此外,OFFSET是易失性的,这意味着每当任何单元格计算时都会重新计算,所以如果您的工作簿有很多行,就会降低工作簿的速度。 基于此,我推荐你使用上面的帮助列方法,或者如果你对数组公式适应,使用BruceWayne的答案。