Excel – login entre plusieurs ID

J'ai une table Excel avec quatre colonnes:

  1. ID # 1 (class le tableau)
  2. ID # 2
  3. Atsortingbut A pour ID # 2
  4. Atsortingbut B pour ID # 2

Le tableau Excel montre une relation / partenariat 1 à 1 entre l'ID n ° 1 et l'ID n ° 2 – la colonne de l'ID n ° 1 me dit à qui je fais reference tandis que la colonne avec l'ID n ° 2 me dit avec qui l'ID n ° 1 est associé . Une seule valeur pour l'ID n ° 1 pourrait être associée à plusieurs valeurs de l'ID n ° 2. Une valeur de l'ID n ° 2 plus tôt dans la list pourrait être répertoriée comme ID n ° 1 plus tard et associée à de nouvelles valeurs. Théoriquement, vous pouvez build une string de relations assez longue entre les ID, selon leur partenariat.

Je souhaite être en mesure d'exécuter une requête qui me dit tous les identifiants liés à un identifiant spécifique, peu importe la distance séparée. Par exemple, si A est lié à B, et B est lié à C et D, et D est lié à E, lorsque je lance une requête sur A, je veux voir que A est lié à B, C, D et E (car ils partagent tous une connection). Il ne doit pas s'agir d'une requête d'une seule instance – il pourrait s'agir d'une list complète des valeurs d'ID uniques avec les identifiants associés.

Je fais des idées de reflection dans Excel et Access pour le faire via une formule, mais je dessine un blanc. Des idées sur la façon dont cela pourrait être accompli?

Dans ORACLE SQL, j'utiliserais une requête hiérarchique à l'aide des clauses CONNECT BY / START WITH . MS Access ne prend pas en charge cela.

Dans Excel, j'utilise une petite VBA dans le context de la hiérarchie entre les gestionnaires et leurs rapports. Il est appelé récursivement et imprime le niveau hiérarchique. Donc, si vous «voulez juste» savoir qui est lié à qui, filterz pour tous les non-blancs.

 Sub PrintHierarchy() Dim T As Range, Idx As Integer, Level As Ssortingng, Root As Ssortingng Root = Selection Set T = [DataTable] 'start recursion GetReport T, Root, "1" End Sub Sub GetReport(T As Range, Boss As Ssortingng, Level As Ssortingng) 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 

Avant de commencer cet exemple, select les colonnes [A: C] et nommez-les "DataTable". Placez ensuite le slider sur la colonne Boss du nœud racine et exécutez Sub PrintHierarchy() :

entrez la description de l'image ici

entrez la description de l'image ici