Um Layoutvarianten zu vergleichen, ist es sinnvoll eine Nutzwertanalyse einzusetzen. Varianten werden dabei anhand von Kriterien miteinander, auf deren Erfüllung hin, verglichen. Sind die Kriterien unterschiedlich wichtig, müssen sie priorisiert werden. Dafür kann man einen paarweisen Vergleich mit allen Kombinationen durchführen und so eine Kriterien-Reihenfolge festlegen.
Im Internet gibt es eine riesige Anzahl an Umsetzungen und Vorlagen. Eine Google-Suche nach „Paarweiser Vergleich“ bringt >500.000 Treffer. Eine Suche nach „Nutzwertanalyse“ liefert auch noch >200.000 Ergebnisse.
Sehr oft können Sie auf so einer Trefferseite auch gleich eine Excel Vorlage downloaden. Das ist schon mal sehr gut. Trifft aber nach meiner Erfahrung überhaupt nicht das Thema.
Probleme im Workshop
Vielleicht geht es Ihnen ähnlich. Ich brauche eine Nutzwertanalyse nie alleine, sondern immer zusammen mit einer Planungsgruppe, einem Lenkungskreis oder eine Geschäftsführung. Und dort hat bei mir noch keine Vorlage perfekt funktioniert.
Die Vorlagen haben fast immer eine vorbereitete Logik eingebaut und passen für eine bestimmte Anzahl von Kriterien. Braucht man mehr Kriterien hat man Pech – Tabelle umbauen, Wartezeit für alle Teilnehmer. Vielleicht kommt dann in der Hektik noch ein Formelfehler dazu – Fiasko.
Auch nicht besser ist es, wenn ein Kriterium vorher in der Erklärung gestrichen werden kann und es z. B. zu einer Rahmenbedingung wird. Dann kann man zwar die Vorlage so lassen, schön sieht sie aber nicht mehr aus.
Aber damit kann ich noch klarkommen. Man kann sich ja auf ein paar Fälle vorbereiten und mehrere Vorlagen mitnehmen. Was viel stärker ins Gewicht fällt, ist in meinen Augen das:
Die Kriterien sind nicht klar definiert und sorgen in der ersten Hälfte des paarweisen Vergleichs immer wieder für nachträgliche Erklärungen und damit Wartezeiten für alle anderen.
Selbst mit einem hochauflösenden Beamer muss man den Bildschirm oft scrollen. Gibt es dann noch viele Kriterien, weiß ohnehin niemand mehr was gerade mit wem vergleichen wird, und wie das mit der Punktevergabe war.
Hat die Gruppe es dann geschafft und alles bewertet, erzeugen viele Tools sogar eine Reihenfolge. Die ist entweder nach Punkten oder nach Rang bewertet. Das ist schon ganz gut und immer unterhaltsam, denn so muss eine ganze Gruppe die Reihenfolge zusammensuchen oder alles wegkopieren und sortieren.
Dabei ist das Verfahren perfekt geeignet, eine fokussierte Sicht auf die Lösungsfindung zu lenken.
Höchste Zeit, dass wir uns das aus Coding-Sicht anschauen und es besser lösen, als das was man sonst so downloaden kann.
Nutzwertanalyse 2.0
Das war eine lange Einleitung. Aber finde es wichtig, dass Sie verstehen an welchen Ecken wir am besten ansetzen können, um die Methode, besonders für Workshops oder Planungsrunden zu verbessern.
Ich fasse mal die obigen Anforderungen zusammen:
- Die Anzahl der Kriterien muss variabel sein und sich auch im Workshop ändern lassen
- Jedes Kriterium braucht bei Bedarf eine zusätzliche Erklärung, welche mitgespeichert werden muss
- Die Eingabe in Tabellenform ist als Ergebnis-Zusammenfassung praktisch und muss vorhanden sein
- Die Bewertung muss Workshop-tauglich sein, und eine Gruppe durch die Tabelle visuell und klar führen
- Die Reihenfolge muss als sortierte Liste ausgegeben werden
Projektierung
Die Vorlagen, die Sie im Internet finden können, sind zu 95% mit Excel erstellt. Das ist für mich auch die passende Wahl für diesen Einsatzfall. Damit wir aber alle Anforderungen unterstützen können, teile ich die Priorisierung auf vier Tabellenblätter auf.
- Tabellenblatt eins sammelt die Kriterien. Falls zu einem Kriterium eine Erklärung notwendig ist, tragen wir sie dort gleich mit ein.
- Das zweite Tabellenblatt enthält die Bewertungsmatrix. Sie wird aus den Kriterien erstellt. Auf dem Tabellenblatt gibt es einen Button, um die Kriterien zu aktualisieren. In die Matrix können manuell die Bewertungen eingetragen werden. Nach Ende kann auf einen Button Ergebnisliste geklickt werden, um eine Reihenfolgen-Liste zu generieren.
- Im dritten Tabellenblatt wird eine Workshop-Abfrage ermöglicht. Step-by-step wird jede Abfrage einzeln angezeigt und kann über Buttons klar und einfach bewertet werden. Falls notwendig, lassen sich auch Erklärungen zu den Kriterien erfassen.
- Nummer vier stellt die Ergebnisliste der Kriterien sortiert dar.
Umsetzung
Tabellenblatt 1: Kriterien
Dieses Tabellenblatt sammelt alle Kriterien und deren Beschreibung. Um zu wissen, wo die Liste beginnt, werden im VBA Quellcode die Startzeile, die Spaltennummer von Kriterien und Beschreibungen als eine Konstante hinterlegt.
Const KRITERIUM_START_ZEILE = 5 Const KRITERIUM_SPALTE = 2 Const KRITERIUMBEMERKUNG_SPALTE = 4
Das was hier auch schon. Der Rest ist Formatierung.
Tabellenblatt 2: Matrix
Dieses Sheet wird fast vollständig automatisch erstellt. In der obersten Zeile stehen die notwendigen Buttons dazu.
Sie haben die Wahl, ob die Matrix neu aufgebaut wird – dann wird auch eine evtl. vorhandene Bewertung gelöscht.
Sub MatrixErstellenUndInhaltLöschen() If MsgBox("Wollen Sie die Matrix neu aufbauen? Dabei werden auch evtl. vorhadene Abfrageergebnisse gelöscht.", vbYesNoCancel, "Matrix neu aufbauen?") <> vbYes Then Exit Sub Application.ScreenUpdating = False Call MatrixLöschen Call MatrixAktualisieren Application.ScreenUpdating = True Call AbfrageNächsteFrage(False) End Sub Private Sub MatrixLöschen() Dim z As Integer Dim s As Integer Dim k As Integer Dim w As String 'bisherige Matrix löschen, wenn Sie größer ist als die bisherige k = KriterienAnzahl() 'beschriebenene Zellen ermitteln z = Sheets("Matrix").UsedRange.SpecialCells(xlCellTypeLastCell).Row s = Sheets("Matrix").UsedRange.SpecialCells(xlCellTypeLastCell).Column 'Bereiche löschen: nach rechts With Sheets("Matrix").Range(Sheets("Matrix").Cells(MATRIX_START_ZEILE - 1, MATRIX_START_SPALTE + k), Sheets("Matrix").Cells(z, s)) .ClearContents .ClearComments End With 'Bereiche löschen: nach unten With Sheets("Matrix").Range(Sheets("Matrix").Cells(MATRIX_START_ZEILE + k, 1), Sheets("Matrix").Cells(z, s)) .ClearContents .ClearComments End With 'Format von Spalte B auf leere Bereiche übertragen Sheets("Matrix").Range("B:B").Copy With Sheets("Matrix").Range(Sheets("Matrix").Columns(MATRIX_START_SPALTE + k), Sheets("Matrix").Columns(s)) .Parent.Activate .PasteSpecial xlPasteFormats End With 'Format von Zeile 2 auf leere Bereiche übertragen Sheets("Matrix").Range("2:2").Copy With Sheets("Matrix").Range(Rows(MATRIX_START_ZEILE + k), Rows(z)) .Parent.Activate .PasteSpecial xlPasteFormats End With 'Format für Matrix auf Spalten übertragen Sheets("Matrix").Range(Columns(MATRIX_START_SPALTE + 2), Columns(MATRIX_START_SPALTE + 2)).Copy With Sheets("Matrix").Range(Columns(MATRIX_START_SPALTE + 3), Columns(MATRIX_START_SPALTE + k - 1)) .Parent.Activate .PasteSpecial xlPasteFormats End With 'Format für Matrix auf Zeilen übertragen Sheets("Matrix").Range(Rows(MATRIX_START_ZEILE + 2), Rows(MATRIX_START_ZEILE + 2)).Copy With Sheets("Matrix").Range(Rows(MATRIX_START_ZEILE + 3), Rows(MATRIX_START_ZEILE + k - 1)) .Parent.Activate .PasteSpecial xlPasteFormats End With z = 0 s = k Do s = s + 1 If s > k Then z = z + 1 s = z Else Sheets("Matrix").Cells(MATRIX_START_ZEILE + z - 1, MATRIX_START_SPALTE + s - 1) = "" Sheets("Matrix").Cells(MATRIX_START_ZEILE + 1, MATRIX_START_SPALTE + 2).Copy With Sheets("Matrix").Cells(MATRIX_START_ZEILE + z - 1, MATRIX_START_SPALTE + s - 1) .Parent.Activate .PasteSpecial xlPasteFormats End With Sheets("Matrix").Cells(MATRIX_START_ZEILE + s - 1, MATRIX_START_SPALTE + z - 1).FormulaLocal = "=2-" & Sheets("matrix").Cells(MATRIX_START_ZEILE + z - 1, MATRIX_START_SPALTE + s - 1).Address(False, False) Sheets("Matrix").Cells(MATRIX_START_ZEILE + 2, MATRIX_START_SPALTE + 1).Copy With Sheets("Matrix").Cells(MATRIX_START_ZEILE + s - 1, MATRIX_START_SPALTE + z - 1) .Parent.Activate .PasteSpecial xlPasteFormats End With End If Loop Until (z = k And s = k) Application.CutCopyMode = False End Sub
Falls Sie nur ein Kriterium nachträglich eintippen und eine Bewertung schon begonnen haben, gibt es den zweiten Button zum Aktualisieren der Matrix.
Mit Anklicken erweitern sich die Kriterien, die Bewertung bleibt bestehen.
Das funktioniert natürlich nur sinnvoll, wenn sich keine der Kriterien in der Reihenfolge verschoben haben.
Sub MatrixAktualisieren() Dim i As Integer Dim k As Integer Dim kriterium As String Dim bemerkung As String k = KriterienAnzahl() For i = 1 To k kriterium = Sheets("Kriterien").Cells(KRITERIUM_START_ZEILE + i - 1, KRITERIUM_SPALTE) bemerkung = Sheets("Kriterien").Cells(KRITERIUM_START_ZEILE + i - 1, KRITERIUMBEMERKUNG_SPALTE) If kriterium <> "" Then Call KriteriumEinfügen(MATRIX_START_ZEILE + i - 1, MATRIX_START_SPALTE - 1, kriterium, bemerkung) Call KriteriumEinfügen(MATRIX_START_ZEILE - 1, MATRIX_START_SPALTE + i - 1, kriterium, bemerkung) End If 'Formeln eintragen Sheets("Matrix").Cells(MATRIX_START_ZEILE + i - 1, MATRIX_START_SPALTE - 2).FormulaLocal = "=SUMME(" _ & Sheets("Matrix").Cells(MATRIX_START_ZEILE + i - 1, MATRIX_START_SPALTE).Address(False, False) & ":" _ & Sheets("Matrix").Cells(MATRIX_START_ZEILE + i - 1, MATRIX_START_SPALTE + k - 1).Address(False, False) & ")" Sheets("Matrix").Cells(MATRIX_START_ZEILE + i - 1, 1).FormulaLocal = "=RANG(" _ & Sheets("matrix").Cells(MATRIX_START_ZEILE + i - 1, MATRIX_START_SPALTE - 2).Address(False, False) & ";" _ & Sheets("matrix").Cells(MATRIX_START_ZEILE, MATRIX_START_SPALTE - 2).Address(False, False) & ":" _ & Sheets("matrix").Cells(MATRIX_START_ZEILE + k - 1, MATRIX_START_SPALTE - 2).Address(False, False) & ")" Next End Sub Private Sub KriteriumEinfügen(zeile As Integer, spalte As Integer, kriterium As String, bemerkung As String) Sheets("Matrix").Cells(zeile, spalte) = kriterium If Not Sheets("Matrix").Cells(zeile, spalte).Comment Is Nothing Then Sheets("Matrix").Cells(zeile, spalte).Comment.Delete If bemerkung <> "" Then Sheets("Matrix").Cells(zeile, spalte).AddComment bemerkung End If Exit Sub Sheets("Matrix").Cells(MATRIX_START_ZEILE - 1, 1).Copy Sheets("Matrix").Cells(zeile, spalte).Parent.Activate Sheets("Matrix").Cells(zeile, spalte).PasteSpecial xlPasteFormats Application.CutCopyMode = False End Sub
Haben Sie die Bewertung direkt in der Matrix durchgeführt, reicht ein dritter Klick auf den Button „Ergebnisliste erstellen“. Das führt Sie direkt auf das entsprechende Tabellenblatt.
Tabellenblatt 3: Abfrage
Wenn Sie im Workshop sind, ist es am übersichtlichsten den Vergleich als Abfrage per Dialog zu starten. Das realisieren wir auf diesem Tabellenblatt.
Um den Prozess zu beginnen, brauchen wir zwei Buttons. Mit einem Button fangen wir mit der nächsten Frage an. Bei dem anderen passiert genau dasselbe, vorher löschen wir aber eine bereits durchgeführte Bewertung.
Im ersten Fall ermitteln wir zuerst, welches der nächste Vergleich ist. So können wir die Datei auch speichern und zu einem anderen Zeitpunkt mit der Bewertung weitermachen. Dafür lassen durchlaufen wir die Zeilen und Spalten der Matrix, beginnen aber nicht mit Spalte 1, sondern mit der Spalte der Zeilennummer.
Enthält die Zelle keinen Wert (““), dann haben wir den nächsten Vergleich gefunden und speichern die Position in den globalen Variable AbfrageZeile und AbfrageSpalte. Finden wir keine leere Zelle, dann ist der Vergleich schon abgeschlossen und wir geben eine Meldung dafür aus.
Mit den gefundenen Werten für Zeile und Spalte suchen wir die beiden entsprechenden Kriterien aus der Matrix und schreiben sie in die Zellen im Dialog. Die beiden Zellen haben dafür einen Namen bekommen und heißen Kriterium1 und Kriterium2.
Damit die Workshopteilnehmer auch wissen, was noch vor Ihnen liegt, zeigen wir an viele Vergleiche noch durchgeführt werden müssen und wie viele schon erledigt sind.
Jetzt sind die Teilnehmer an der Reihe und können auf einen der drei Buttons klicken. Dabei wird jeweils der entsprechende Wert in die Matrix geschrieben:
- Kriterium 1 ist wichtiger als Kriterium 2: Wert 2
- Kriterien sind gleich wichtig: Wert 1
- Kriterium 2 ist wichtiger als Kriterium 1: Wert 0
Sub AbfrageNeustart() If MsgBox("Wollen Sie die Ergebnisse löschen und neustarten?", vbYesNoCancel, "Neustarten?") <> vbYes Then Exit Sub Application.ScreenUpdating = False Call MatrixLöschen Application.ScreenUpdating = True Call AbfrageNächsteFrage End Sub Sub AbfrageNächsteFrage(Optional AufSeiteWechseln As Boolean = True) Dim z As Integer Dim s As Integer Dim k As Integer Dim w As String Dim i As Integer If AufSeiteWechseln = True Then Sheets("Abfrage").Select 'letzte Position finden k = KriterienAnzahl() z = 1 s = 1 AbfrageZeile = 0 AbfrageSpalte = 0 i = 0 Do s = s + 1 If s > k Then z = z + 1 s = z Else i = i + 1 w = Sheets("Matrix").Cells(MATRIX_START_ZEILE + z - 1, MATRIX_START_SPALTE + s - 1) If w = "" Then 'gefunden AbfrageZeile = z AbfrageSpalte = s End If End If Loop Until (AbfrageSpalte <> 0 And AbfrageZeile <> 0) Or (z = k And s = k) If AbfrageZeile = 0 And AbfrageSpalte = 0 Then Call ErgebnislisteErstellen If MsgBox("Die Bewertung ist bereits vollständig durchgeführt. Wollen Sie zur Ergebnistabelle wechseln?", vbYesNoCancel, "Bewertung ist beendet") = vbYes Then Sheets("Ergebnisreihenfolge").Select End If Exit Sub End If 'Kriterien anzeigen Sheets("Abfrage").Range("Kriterium1") = FindeKriterium(AbfrageZeile) Sheets("Abfrage").Range("Kriterium2") = FindeKriterium(AbfrageSpalte) Sheets("Abfrage").Range("Bemerkung1") = FindeBemerkung(AbfrageZeile) Sheets("Abfrage").Range("Bemerkung2") = FindeBemerkung(AbfrageSpalte) 'Fortschritt anzeigen Sheets("Abfrage").Range("fortschritt") = "Vergleich " & i & " von " & (k * k - k) / 2 End Sub Sub AbfrageZeileIstWichtiger() If AbfrageZeile <> 0 And AbfrageSpalte <> 0 Then Sheets("Matrix").Cells(MATRIX_START_ZEILE + AbfrageZeile - 1, MATRIX_START_SPALTE + AbfrageSpalte - 1) = 2 End If Call AbfrageNächsteFrage End Sub Sub AbfrageSpalteIstWichtiger() If AbfrageZeile <> 0 And AbfrageSpalte <> 0 Then Sheets("Matrix").Cells(MATRIX_START_ZEILE + AbfrageZeile - 1, MATRIX_START_SPALTE + AbfrageSpalte - 1) = 0 End If Call AbfrageNächsteFrage End Sub Sub AbfrageGleichWichtig() If AbfrageZeile <> 0 And AbfrageSpalte <> 0 Then Sheets("Matrix").Cells(MATRIX_START_ZEILE + AbfrageZeile - 1, MATRIX_START_SPALTE + AbfrageSpalte - 1) = 1 End If Call AbfrageNächsteFrage End Sub
Tabellenblatt 4: Ergebnisreihenfolge
Auf der Ergebnisseite befassen wir uns mit der ermittelten Reihenfolge. Wir holen uns den Rang und die Punkte aus der Matrix und sortieren sie auf diesem Tabellenblatt.
Sub ErgebnislisteErstellen() Dim k As Integer Dim i As Integer Dim j As Integer i = Sheets("Ergebnisreihenfolge").UsedRange.SpecialCells(xlCellTypeLastCell).Row Sheets("Ergebnisreihenfolge").Range(Sheets("Ergebnisreihenfolge").Cells(4, 1), Sheets("Ergebnisreihenfolge").Cells(i, 3)).ClearContents k = KriterienAnzahl() For i = 1 To k Sheets("Ergebnisreihenfolge").Cells(i + 3, 1) = Sheets("Matrix").Cells(MATRIX_START_ZEILE + i - 1, 1) Sheets("Ergebnisreihenfolge").Cells(i + 3, 2) = Sheets("Matrix").Cells(MATRIX_START_ZEILE + i - 1, MATRIX_START_SPALTE - 2) Sheets("Ergebnisreihenfolge").Cells(i + 3, 3) = Sheets("Matrix").Cells(MATRIX_START_ZEILE + i - 1, MATRIX_START_SPALTE - 1) Next With Sheets("Ergebnisreihenfolge").Sort .SortFields.Clear .SortFields.Add Key:=Range(Cells(4, 1), Cells(4 + k, 1)), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange Range(Cells(4, 1), Cells(4 + k, 3)) .Header = xlNo .MatchCase = False .Orientation = xlTopToBottom .Apply End With End Sub
Ein besserer Workshop
Wenn Sie jetzt in einen Workshop gehen und Kriterien priorisieren, läuft es viel entspannter ab.
Das Sammeln der Kriterien erfolgt gleich zusammen mit einer passenden Erklärung – völlig egal wie viele Kriterien es auch werden.
Diese Beschreibung sollten Sie sich auch auf keinen Fall einsparen. Wenn am Projektende doch eine Meinungsverschiedenheit herrscht, können Sie nachschauen, was damals unter dem Kriterium verstanden wurde. Das hilft immer.
Um die Bewertungsmatrix darauf aufzubauen und für eine Eingabe vorzubereiten, reicht jetzt auch ein Klick aus.
Jetzt haben Sie die Wahl. Was passt besser? Ein direktes Eintragen in die Tabelle?
Zur Unterstützung gibt es Hilfskommentare zu Kriterien, wenn Bemerkungen eingegeben wurden. Oder eignet sich ein Dialog mit geführter Abfrage besser? Das passt auf jeden Beamer und kann beliebig vergrößert werden.
In beiden Fällen führt das zu einer Ergebnisreihenfolge. Entweder nach Anklicken auf „Ergebnisliste erstellen“ oder automatisch bei der Dialog-geführten Abfrage.
Probieren Sie es einfach aus. Sie können die Excel-Datei mit einem Beispiel downloaden. Und wenn der Workshop trotzdem zu lange dauert, hilft vielleicht der Workshop Timer.
Viel Spaß im Workshop!
Download
Excel-Vorlage mit Makros als Zip-Datei
Excel-Makros und das Internet: https://techpluscode.de/excel-makros-und-das-internet/
Links
Paarvergleich auf Wikipedia: https://de.wikipedia.org/wiki/Paarvergleich
Nutzwertanalyse auf Wikipedia: https://de.wikipedia.org/wiki/Nutzwertanalyse
Artikel Besprechungszeit visualisieren
Hallo Thomas,
das ist ja eine sehr gelungene Umsetzung des Themas „Paarweiser Vergleich“! Genau was ich mir erhofft hatte an Unterstützung. Vielen Dank!
Einzige Anmerkung: Wenn ich ein Kriterium hinzufüge, dann kann ich dieses per „Kriterien aktualisieren“ auch in die Matrix aufnehmen, nur die Formatierung der neuen Spalte/Zeile wird bei mir nicht nachgezogen.
VG, Christian
Hallo Christian,
danke für dein Feedback. Schön wenn es dir hilft.
Mit deiner Beschreibung hast du recht. „Kriterien aktualisieren“ ist nur dazu gedacht, Texte zu aktualisieren.
Wenn neue Merkmale dazukommen, oder auch rausfallen, löst das nur „Bewertungsmatrix neu aufbauen“ richtig.
Gruß
Thomas