Symmetrische Matrix mit indirekten Abhängigkeiten
#1
Hallo zusammen,

Ich bräuchte mal etwas Hilfe bei dem füllen einer symmetrischen Matrix.

Prinzipiell geht es um die beiden Matrizen im Anhang. Bezeichnen wir die linke Matrix als Matrix A und die rechte als Matrix B.

   

Matrix A ist eine symmetrische Matrix in der Abhängigkeiten von Reiheneinträgen zu Spalteneinträgen markiert werden. Beispiel: Reihe(Eintrag A) ist Abhängig von Spalte(Eintrag B). Diese Abhängigkeiten werden mit folgender Formelstruktur bestimmt:


Code:
=WENN(ZÄHLENWENNS(Tabelle1[Spalte1];$A2;Tabelle1[Spalte2];B$1)>0; "x"; "")


Jetzt möchte ich allerdings gerne auch indirekte Abhängigkeiten eintragen. Heißt im Beispielfall: Eintrag A ist abhängig von Eintrag B und dieser ist abhängig von Eintrag D, welcher ebenfalls von Eintrag E abhängig ist. Also soll ein die Reihe(Eintrag A) bei Spalte(Eintrag D) und Spalte(Eintrag E) ein "O" eingefügt werden. Das ganze soll dann so wie in Matrix B aussehen.

Hauptabhängigkeiten sollen NICHT überschrieben werden.

Im konkreten Fall soll dies bei einer 59x59 Matrix zum Einsatz kommen, falls diese Information hilfreich ist.

Ich danke euch schon mal im voraus!

Grüße,
xrayproudly
Top
#2
/push

Hat wirklich niemand einen Denkanstoß oder einen Lösungsansatz? Ich dachte eventuell gibt es hier eine vorgefertigte Funktion von der ich nichts weiß.


Grüße,
xrayproudly
Top
#3
Hallöchen,

ich denke, hier wirst Du bei einer größeren Matrix eine Makrolösung benötigen, die rekursiv die einzelnen Möglichkeiten abklopft ...
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Top
#4
Hallo xrayproudly,

ohne VBA sehe ich nur eine stufenweise Prüfung (für jede Stufe eine Matrix) der Abhängigkeiten (siehe Anlage). Hierbei heist die vorgefertigte Funktion MMULT.
Und hier noch einige Bemerkungen:

1. Da die genutzte Funktion MMULT nur mit Zahlen rechnen kann, habe ich die "x" durch 1en, die "" durch 0en und die "O" durch eine andere Zahl ersetzt und über das benutzerdefinierte Format "0;;" die 0en ausgeblendet.

2. In der Funktion MMULT bezieht sich der erste Vektor auf die Zeile der vorhergehenden Matrix und der zweite Vektor auf die Spalte der ersten Matrix.

3. Wenn du die Stufe der Abhängigkeiten nicht angezeigt bekommen möchtest, kannst du in den Zellen in der linken oberen Ecke der Matrix immer den gleichen Wert eintragen.


Angehängte Dateien
.xlsx   Abhängig.xlsx (Größe: 12,02 KB / Downloads: 4)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#5
Hallo Ego,

danke für deine Hilfe und deine Ausarbeitung. Das hat mir schon mal enorm geholfen. Ich versuche das ganze mal in meine Tabelle zu verbasteln.



Grüße,
xrayproudly
Top
#6
Hallo xrayproudly,

ich hoffe, dass die Abhängigkeitstiefe nicht zu gross ist, ich persönlich würde bei einer 59*59 Matrix spätestens ab der vierten Stufe lieber ein Makro nutzen. Aber vielleicht bist du da ja ein wenig unempfindlicher.

Falls du ein Makro haben möchtest, melde dich und beantworte erstmal einige Fragen:

1. Sind Schleifen in den Abhängigkeiten möglich (ein Objekt ist über verschiedene Objekte von sich selbst abhängig)?
2. Wie soll das Makro reagieren wenn sie (trotzdem) auftreten?
3. Sind Verknotungen möglich (ein Objekt ist über verschiedene Wege vom gleichen Objekt abhängig) und, wenn ja, wie soll das Makro dieses ausweisen.
4. Willst du alle Abhängigkeiten für alle Objekte ermitteln oder nur alle Abhängigkeiten für ausgewählte "Ober-"Objekte? (Das könnte die Rechenzeit reduzieren.)
5. Wie wilst du die Ergebnismakro später nutzen? Eventuell kann man das Makro daraufhin schon anpassen.
ZB. könnte man im modularen Möbelbau anstelle der einfachen Abhängigkeiten direkt die Anzahl der benötigten Bauteile ermitteln.
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#7
Hallo Ego,

danke für deine Mühe und deinen Gehirnschmalz.

Prinzipiell geht es bei dem ganzen Unterfangen um eine Abhängigkeitsprüfung verschiedenster Systeme. Dabei soll ein komplettes Netzwerk aus Systemen durch einen User Acceptance Test (Beta-Test) systemübergreifend geprüft werden. Dabei gibt es z.B. Systeme, die nur Daten / Informationen enthalten und andere Systeme die diese Daten verarbeiten und an Dritte weitergeben. Ziel ist es einen Überprüfungsfall für jede mögliche Tätigkeit in diesem Systemnetzwerk zu generieren. Für jeden Überprüfungsfall sollte optimalerweise ebenfalls eine Bedingungsliste an Systemen vorliegen, damit eine chronologische Einordnung und eine Planung der Überprüfungen statt finden kann.

Beispiel:

Überprüfungsfall Nummer 1 besitzt folgende Systemverknüpfungen:
   

Hier ist System A von System B, C, F abhängig. Heißt: Diese Systeme müssen vor System A überprüft und online sein.

Überprüfungsfall Nummer 2 besitzt folgende Systemverknüpfungen:
   

Hier ist System C von System H, I, F abhängig. Heißt: System A ist indirekt auch vom Status dieser Systeme abhängig.

Am Ende ergibt sich dann ein systemübergreifendes Netzwerkdiagramm wie folgt:
   

Grundsatz für diese Abhängigkeiten der Überprüfungsfälle selbst, sind bereits vorhandene Informationen über einzelne Funktionsabläufe in den einzelnen Systemen. Beispielsweise wird ein Überprüfungsfall dann ausdefiniert als:
Fallbeschreibung: "Gehe in System A und nehme Daten aus System B, C, F und führe folgende Funktion aus ..."
Erwartetes Resultat: "Die generierten Daten werden an System X, Y ,Z weitergeleitet".




Nun zu deinen Fragen:

1. Schleifen sind möglich, da einige Systeme mehrere Funktionen bereitstellen, die von einer systeminternen zweiten Funktion benötigt werden. Theoretisch kann diese Schleifenabhängigkeit aber vernachlässigt werden, da dass System wenn es Online geschaltet wird, diese Funktionen bereitstellen kann.
2. Wenn Schleifen auftreten könnte das Makro diese einfach überspringen / ignorieren.
3. Verknotungen sind möglich (Siehe Überprüfungsfall 1 und 2 mit System F). Hier soll das System, welches mehrfach als Bedingung benötigt wird in der Bedingungshierarchie passend eingeordnet werden (Ggf. eine Ebene nach oben rutschen, wenn es gleichzeitig eine Indirekte und direkte Abhängigkeit ist - siehe systemübergreifendes Netzwerkdiagram).
4. Prinzipiell sollen Abhängigkeiten aller Objekte ermittelt werden.
5. Das Ergebnismakro soll zunächst wie im ursprünglichen Beitrag erst ein mal die indirekten Abhängigkeiten der einzelnen Systeme in der Matrix farbig markieren. Optimal wäre dann für jeden Überprüfungsfall die Erstellung eines Netzwerkdiagramms. Das könnte über eine UserForm geschehen. Sucht der Anwender nach einer Überprüfungsnummer, erscheint das Bedingungsdiagramm. Allerdings ist das wirklich nur optional.

Ich weiß dass, das ganze nicht so trivial ist und bin selber hier am durchprobieren und am schreiben einiger Programme. Ich danke dir auf jeden Fall für deine Mühe, erwarte aber nicht dass du mir hier ein fertiges Programm hin klatscht. Leider sind meine VBA Kenntnisse einfach begrenzt, da ich eher im C++ Raum umherprogrammiere. Deine Denkanstöße haben auf jeden Fall schon geholfen ;)

Ich hoffe die Informationen reichen dir bis jetzt, ansonsten schreib doch gerne.

Grüße,
xrayproudly
Top
#8
Hallo xrayproudly,

A) zu deiner Frage
In der Anlage ein Programm (hinter dem Button "tuwat" im Blatt "Tabelle2") zur Berechnung der indirekten Abhängigkeiten einer quadratischen Matrix.
Das Ergebnis wird unter der Matrix ausgegeben.
Wenn in der benannten Zelle "Groesser1"  (unter dem Button "tuwat") ein Eintrag ist (zB."O"), werden die Zahlen der indirekten Abhängigkeitsebenen durch diesen Eintrag ersetzt.
Code:
Sub Machs()
Dim ZL As Long
Dim ZA As Long
Dim SL As Long
Dim SA As Long
Dim AnzZ As Long
Dim Ebene As Long
Dim Groesser1 As Variant
Dim Liste As Variant
Dim Ausgabe As Variant
Dim Gefunden As Boolean

Liste = ThisWorkbook.Names("Liste").RefersToRange.Value
Ausgabe = ThisWorkbook.Names("Liste").RefersToRange.Value
Groesser1 = ThisWorkbook.Names("Groesser1").RefersToRange.Value

If UBound(Liste, 1) <> UBound(Liste, 2) Then
    MsgBox "Die Liste muss quadratisch sein."
Else
    AnzZ = UBound(Liste, 1)
    Ebene = 0
    Gefunden = True
    Do While Ebene < AnzZ And Gefunden
        Ebene = Ebene + 1
        Gefunden = False
        For ZA = 1 To AnzZ
            For SA = 1 To AnzZ
                If Ausgabe(ZA, SA) = Ebene Then
                    ZL = SA
                    For SL = 1 To AnzZ
                        If Liste(ZL, SL) = 1 And Ausgabe(ZA, SL) = 0 Then
                            Gefunden = True
                            Ausgabe(ZA, SL) = Ebene + 1
                        End If
                    Next SL
                End If
            Next SA
        Next ZA
    Loop
    If Groesser1 <> "" Then
        For ZA = 1 To AnzZ
            For SA = 1 To AnzZ
                If Ausgabe(ZA, SA) > 1 Then
                    Ausgabe(ZA, SA) = Groesser1
                End If
            Next SA
        Next ZA
    End If
    
    ThisWorkbook.Names("Ausgabe").RefersToRange.Resize(AnzZ, AnzZ).Value = Ausgabe
    MsgBox Ebene & " Ebenen"
End If
End Sub


B) Ursprüngliche Liste
Wenn ich dich richtig verstanden habe hattest du die Daten schon in einer auswertbaren Liste (wie in Spalten BK:BL). Daraus läst sich schnell eine direkte Abhängigkeitsanzeige (wie im den ersten beiden Bildern) erstellen (BP3:BR16).


Angehängte Dateien
.xlsm   Abhängig.xlsm (Größe: 54,08 KB / Downloads: 2)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





Top
#9
Hey Ego,

Top danke dir für die Mühe! Noch funktioniert es nicht ganz da er einfach alle Stellen außer die "1" mit einem "O" ersetzt. Allerdings habe ich auch deinen Code gerade einfach portiert und muss schauen ob ich da noch irgendwas falsch definiert habe. Ich schaue mir das im Laufe des Tages an.

Deine Formel für die Abhängigkeiten in BP:BR ist der Hammer! Danke dir dafür!

Grüße,
xrayproudly
Top
#10
Hallo xrayproudly,

A) zu
Zitat:Noch funktioniert es nicht ganz da er einfach alle Stellen außer die "1" mit einem "O" ersetzt.
Dann funktioniert es, denn so hatte ich deine ursprüngliche Anfrage verstanden. Wenn du die Zelle leer läst, werden wieder die kleinsten Abhängigkeitsebenen angezeigt.

B) Abhängigkeitsbäume
In der Anlage einmal ein Makro zur erstellung der Abhängigkeitsbäme (über Button "bäume" im Blatt "Tabelle3") auf Basis der erweiterten Abhängigkeitsmatrix (mit Zeilen- und Spaltenbeschriftung). Und hier noch zwei Bemerkungen zu Schleifen:

1. Wenn ein Objekt im gleichen Ast schon einmal aufgetreten ist, wird es zwar angezeigt, aber nicht weiter verzweigt.
2. Ich nehme an, dass es in deiner Matrix nicht soviel Schleifen gibt wie in meinen Zufallsdaten und daher die Bäume kleiner sind.


ps. Achtung! Die Zelle "Vater" sollte in einem eigenen Bereich liegen, da ich vor der Ausgabe der Bäume Zellen in 10.000 Zeilen unter dem "Vater" gnadenlos leere.


Angehängte Dateien
.xlsm   Abhängig.xlsm (Größe: 66,32 KB / Downloads: 3)
helmut

Für mich ist die Möglichkeit in Excel an Zellen und Bereichen Namen zu vergeben die wichtigste Funktionalität.
Sie macht Formeln und den VBA-code verständlicher. Für Makros gilt die Regel: "Nur über benannte Bereiche auf den Inhalt der Zellen zugreifen."
Und wofür sind Regeln da? Um nachzudenken bevor man sie bricht.





[-] Folgende(r) 1 Nutzer sagt Danke an Ego für diesen Beitrag:
  • xrayproudly
Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste