2015-05-21 60 views
0

我有四列Excel表之間的連接:Excel中 - 多個ID

  1. ID#1(排序表)
  2. ID#2
  3. 屬性一種用於ID#2
  4. 屬性B用於ID#2

Excel表顯示ID#1和ID#2之間的1對1關係/夥伴關係 - ID#1的列告訴我我在引用誰,而列ID#2告訴我ID#1與誰合作。 ID#1的單個值可以與ID#2的多個值配對。之後列表中ID#2的值可能會在稍後列爲ID#1並與新值配合使用。從理論上講,您可以在ID之間建立相當長的關係鏈,具體取決於他們是如何搭配的。

我希望能夠運行一個查詢,告訴我所有與特定ID相關的ID,無論它們分開多遠。例如,如果A與B有關,而B與C和D有關,並且D與E有關,那麼當我在A上運行一個查詢時,我想看到A與B,C,D和E(因爲他們都分享連接)。它不一定是單個實例的查詢 - 它可能只是具有相關ID的唯一ID值的完整列表。

我在Excel和Access中頭腦風暴的想法通過公式做到這一點,但我畫了一個空白。關於如何實現這一點的任何想法?

+1

您使用的[SQL]標籤。您是將這些數據存儲在一個獨立的Excel表中,還是想查詢SQL表? – alybaba726

+0

對不起 - 我錯誤地添加了SQL。數據位於一個獨立的Excel表格中。 –

回答

0

在ORACLE SQL中,我會使用使用CONNECT BY/START WITH子句的分層查詢。 MS Access不支持這一點。

在Excel中,我在管理器及其報表的層次結構中使用小型VBA。它被遞歸調用並打印層次結構級別。因此,如果你「只是」想知道誰與誰有關,請篩選所有非空白。

Sub PrintHierarchy() 
Dim T As Range, Idx As Integer, Level As String, Root As String 

    Root = Selection 
    Set T = [DataTable] 

    'start recursion 
    GetReport T, Root, "1" 

End Sub 

Sub GetReport(T As Range, Boss As String, Level As String) 
Dim Idx As Integer, Num As Integer 

    Idx = 2 
    Num = 1 

    Do While T(Idx, 1) <> "" 
     If T(Idx, 1) = Boss Then 
      T(Idx, 3) = "'" & Level & "." & Num 
      Num = Num + 1 

      GetReport T, T(Idx, 2), T(Idx, 3) 

     End If 
     Idx = Idx + 1 
    Loop 
End Sub 

在開始本例之前,選擇列[A:C]並將它們命名爲「DataTable」。然後將光標在所述根節點的老闆柱並運行Sub PrintHierarchy()

enter image description here

enter image description here