2015-08-17 57 views
0

我在編寫VLOOKUP以對一些數據進行排序時遇到了麻煩。用於填充Excel表的VLOOKUPs

我有了看起來像這樣的數據的一個表:

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 
    ...    .... 

我想打一個表,每一個實例,其中在第一和第二列的日期之間的時間間隔恰好是一個月(例如如05 - 5月 - 15日和05 - 6月 - 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,但我不確定如何使用兩列而不是一列來完成此操作。

在此先感謝。

+0

在MaturityDate之前是否只有一個MarkAsofDate的實例恰好是1個月?另外 - 數據總是按照您在那裏的方式進行排序?首先按MarkAsofDate排序,然後按到期日排序? –

回答

1

當你開始看到時,Vlookup有一些限制。另一個建議是Index/Match。在你的第二張表中使用它。

注:我假設您的頂級表在Sheet1。把這個在您的C2,第二個表(下簡稱「零稅率1M」標頭):

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

0

有很多的方法可以做到這一點 - 如果您的數據進行排序首先是MarkAsofDate,然後是到期日,最簡單的方法是在原始數據選項卡上添加一個輔助列 - 比方說E列。在E列中,從E2開始並複製下來,鍵入[假設MarkAsofDate是列A & MaturityDate是列E]:

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

此列將顯示MarkAsO在MarkAsOfDate之後1個月的每個具有MaturityDate的項目的fDate;對於所有其他行,它將顯示「」。

在您的特殊數據結果選項卡中,使用MATCH函數查找E列中與您當前行的MarkAsOfDate匹配的行。我們還將使用INDEX函數返回C列中該行的值。假設您的第一張包含原始數據的工作表是sheet1,而您的特殊數據結果位於工作表2上,請在工作表2上將其輸入到E2中並向下拖動:

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

另一種選擇(除了BruceWayne推薦的數組公式)將使用OFFSET函數。 OFFSET根據起始點創建一個新的範圍,將給定高度和寬度的許多單元格移動到右/左/上/下。在這種情況下,我們首先使用MATCH來查找Sheet1上的MarkAsOfDate第一次與Sheet2匹配。我們將利用這些信息和OFFSET函數來創建它從那裏開始新的範圍,並在數據的底端,就像這樣:

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

然後,我們只需要使用VLOOKUP在我們上面創建的範圍,像這樣:

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

這第二方案避免了需要一個幫手列,但更復雜,如果你的行/列變化可能會有錯誤(因爲我們不得不硬編碼幾件事情在OFFSET函數)。此外,OFFSET是易失性的,這意味着它在任何單元格計算時都會重新計算,所以如果您的工作簿有很多行,它會減慢工作簿。基於此,我建議您使用上面的幫助列方法,或者如果您對Array Formulas感到滿意,請使用BruceWayne的答案。

+0

使用OFFSET的大型數據集是一個壞主意,因爲它是一個'volatile'函數。 – MatBailie

+0

@MatBailie正確,如上面的答案所示。但是,這個原則可以在另一種方法不太可行的情況下提供幫助。 –