Fügen Sie gewichtete Zahlen entlang eines Prozessdiagrammflusses in Excel hinzu

Fügen Sie gewichtete Zahlen entlang eines Prozessdiagrammflusses in Excel hinzu

Ich habe eine Prozesskarte in Excel erstellt, die ich mit Visio visualisiere. Ich habe Prozesse und Entscheidungen. Prozesse brauchen Zeit und das Entscheidungsergebnis wird mit einer Wahrscheinlichkeit gewichtet. Vorausgesetzt, meine Zahlen sind korrekt (was sie wahrscheinlich nicht sind ;)), sollte mir dies ermöglichen, die durchschnittliche Ausführungszeit des gesamten Prozesses zu berechnen.

Um nun die durchschnittliche Ausführungszeit zu erhalten, muss ich die Pfade unter Berücksichtigung der Gewichte zusammenfassen. Das ist an sich keine schwierige Aufgabe, ich würde jedoch ein Forum bevorzugen, das nicht spezifisch auf den aktuellen Zustand der Karte zugeschnitten ist, sondern sich selbst aktualisieren kann, wenn ich weitere Prozesse und Entscheidungen hinzufüge. Im Prinzip sollte dies mit einer Art rekursiver Funktion möglich sein, da die Pfade in der Excel-Tabelle definiert sind. Ich bin jedoch etwas ratlos, wie ich eine rekursive Funktion in Excel implementieren würde, falls das überhaupt möglich ist.

Hat das schon mal jemand gemacht? Oder hat einen Tipp, wie das funktionieren könnte? Oder muss ich auf externe Tools zurückgreifen?

EDIT: Hier ist ein Beispiel für mein Excel: Bildbeschreibung hier eingeben

Somit definieren „Prozessschritt“ und „Nächster Schritt-ID“ zusammen mehrere Pfade von „Start“ bis „Ende“. Entscheidungen haben Ergebnisse mit einer bestimmten Gewichtung (ausgedrückt in Prozent), die die Wahrscheinlichkeit darstellt, dass die erste der beiden „Nächster Schritt-IDs“ gewählt wird.

In diesem Fall würde es also ungefähr so ​​beginnen: 1 + 0,4*(2 ...) + 0,6*(2 ...) ... wie Sie sehen, ist es ziemlich schwierig, es manuell richtig hinzubekommen, selbst wenn ich Excel nie ändern würde. Stellen Sie sich nun vor, ich füge ein paar Schritte hinzu ...

Ich hoffe, das klärt die Aufgabe. Ich versuche das jetzt mit VBA zu lösen … aber ich habe noch nie VBA verwendet, also wäre ich trotzdem für alle Hinweise dankbar.

Antwort1

Ok, ich habe das also schließlich selbst mit einer rekursiven VBA-Funktion gelöst:

Function ProcessTime(row, time) As Double
    Application.Volatile
    ' Define Columns
    ProcessStepCol = 2
    NextStepIDCol = 4
    ShapeTypeCol = 6
    TimeCol = 7
    PyesCol = 8
    ' Do actual calculation
    ShapeType = Worksheets("Process").Cells(row, ShapeTypeCol).Value
    
    ' Exit at the End
    If ShapeType = "End" Then
        ProcessTime = time
        Exit Function
    End If
    
    ' Simply add current time if we have a Process
    If ShapeType = "Process" Then
        NextStepRow = GetNextStepRows(row, 0)
        TimeOfThisRow = Worksheets("Process").Cells(row, TimeCol).Value
        ProcessTime = time + ProcessTime(NextStepRow, TimeOfThisRow)
        Exit Function
    End If
    
    ' Add wheights to branches if we have a Decision
    If ShapeType = "Decision" Then
        NextStepRowYes = GetNextStepRows(row, 0)
        NextStepRowNo = GetNextStepRows(row, 1)
        P_yes = Worksheets("AlertProcess").Cells(row, PyesCol).Value / 100
        P_no = 1 - P_yes
        ProcessTime = time + (P_yes * ProcessTime(NextStepRowYes, 0)) + (P_no * ProcessTime(NextStepRowNo, 0))
        Exit Function
    End If
End Function


' Find the row of the next step
Function GetNextStepRows(row, stepNo) As Long
    Application.Volatile
    ' Define Columns
    ProcessStepCol = 2
    NextStepIDCol = 4
    ' Do actual calculation
    NextStepIDs = Worksheets("AlertProcess").Cells(row, NextStepIDCol).Value
    NextStepIDsSplit = Split(NextStepIDs, ",")
    NextStepID = NextStepIDsSplit(stepNo)
    GetNextStepRows = Worksheets("AlertProcess").Range("B:B").Find(What:=NextStepID).row
End Function

Und ja, ich bin mir bewusst, dass dies nicht der eleganteste Code ist ;)

verwandte Informationen