2015-06-24 107 views
3

我有兩個表一個具有Excel中查找返回唯一值

Item ID 
Box 78 
Glue 105 
Box 85 

另一片

Item ID 
Box 
Box 
Glue 

在第二片我想從第一張仰望的ID

我在哪裏複製(如Box)我想一次返回ID。 因此,Box上的查找將第一次返回78,並且第二次返回85

像這樣:

Item ID 
Box  78 
Box  85 
Glue 105 
+1

你能舉一個很簡單的例子,顯示你想要* *發生?很難理解你的描述。 – LondonRob

+0

表1 物品ID 盒78 膠87 盒105 表2 物品ID 盒 盒 膠 我想爲在表2的ID列,將返回78第一次發現的查找第105盒和第二...等等。 – user290687

+0

所有項目的ID值是否唯一?或者它在一件物品中是唯一的?喜歡可以Box有ID 78和Glue有ID 78嗎? – chancea

回答

0

可以使用INDEX/MATCH的微小變化:

=INDEX(B$2:B$4,SMALL(IF(A$2:A$4=C2,ROW(B$2:B$4)-1,""),COUNTIF(C$2:C2,C2))) 

確認與CTRL + SHIFT +輸入數組公式,然後自動填充了下來。

單元格引用的說明:

A $ 2:A $ 4 - 項目欄(表Sheet 1)

B $ 2:B $ 4 - ID柱(Sheet 1中)

C $ 2:C2 - 物品列(Sheet2的)

C2 - 你仰視

+0

嘗試此並獲得#Value! – user290687

+0

可能是引用的問題。我認爲你應該嘗試tigeravatar的解決方案,如果這不適合你回來的確切範圍和工作表名稱,你需要使用。 – Kyle

0

乍一看,這似乎是不可能的項目,因爲VLOOKUP不知道如何處理多個Box es。

但是使用this ingenious answer你實際上可以完成這項工作。

在表1中,輸入公式:

Some formulae for sheet 1

導致:

item instance combined id range_above 
Box  1   Box1  78 $A$2:$A$2 
Glue 1   Glue1  105 $A$2:$A$3 
Box  2   Box2  85 $A$2:$A$4 

現在,您可以VLOOKUP關閉combined而不是關閉item。 (很明顯,你必須在表2中做相同的技巧。)

請注意,所有這些公式只需延長表格長度即可。它會一直工作。

+0

這個解決方案的問題是我沒有兩張紙上的ID。表2中的ID是空白的,我們通過查找來填充它。 – user290687

+0

再次閱讀我的答案@ user290687,並稍微想一想。一旦將兩個工作表上的每個「盒子」轉換爲「盒子1」或「盒子2」*,您可以在工作表2上執行「VLOOKUP」。 – LondonRob

1

替代解決方案。不需要幫助列,不需要數組輸入。 Sheet 2中單元格B2和複製下來:

=INDEX(Sheet1!$B$2:$B$4,MATCH(1,INDEX((Sheet1!$A$2:$A$4=A2)*(COUNTIF(B$1:B1,Sheet1!$B$2:$B$4)=0),),0)) 
+0

這個工作非常完美! - 早先的錯誤是我的。 – user290687

+0

很高興聽到它:) – tigeravatar

0

用於執行此操作的一個好方法是使用陣列式來使用從第二片材的每個項目的重複次數的第一片查找值。此方法不需要「幫助」列。

將實現此的公式爲:{=INDEX(Sheet1!A:B,SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2)),2)}

這個公式是一個陣列式。你可以把它複製到細胞B2Sheet2,然後按Ctrl鍵++輸入進入。你必須Ctrl + Shift + 輸入使這個數組公式。您可以將這個公式在列B中拖動,以獲得所需的行數。

您的工作,完成後,將包含以下公式: Finished Worksheet

我們把這個公式分解成各個組成部分:

  1. 確定有多少次給定的項目已列被重複A.我們用下面的代碼來完成這個工作,它將計算當前行的項目出現在列A中所有先前行的次數。範圍的開始和結束的相對參考的絕對引用確保範圍將自動更新正如我們在B列向下拖動式:

    COUNTIF($A$2:$A2,"="&$A2) 
    
  2. 標識包含Sheet 2中的A列中的項第k Sheet 1中。以下代碼首先使用IF語句在Sheet1中找到全部行,其中包含Sheet2的A列中的項目。這使用數組語法將指定範圍內的所有行與值進行比較。 IF語句返回一個數組,其中包含如果找到任何已標識的行。如果沒有找到,則返回空字符串。

    IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),"") 
    
  3. 查找所有正在使用SMALL功能,它從一個陣列選擇第n最小項所確定的第n 的值。對於k,我們通過將在步驟1計算

    SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2)) 
    
  4. 最後計數,我們把它一起在INDEX功能,將查找在指定行的值(步驟確定3)和列(2),在給定的範圍內。

    {=INDEX(Sheet1!A:B,SMALL(IF((Sheet1!A:A)=Sheet2!A2,ROW(Sheet1!A:A),""),COUNTIF($A$2:$A2,"="&$A2)),2)}