ich habe eine Exceltabelle, mit der mittels vier Kriterien eine Bewertung (Werte zwischen "" und 100) durchgeführt werden soll und diese Kriterein sollen jeweils unterschiedliche gewichtet werden können.
Nun habe ich das sehr einfach mittels VBA schon einmal geschrieben und es funktioniert auch. Aber ich denke, es gibt eine bessere Möglichkeit über Schleifen, wie man diese Aufgabe "eleganter" oder einfacher und mit weniger Aufwand lösen kann.
Ich möchte also besseres Programmieren lernen und bitte daher um Hilfe.
Sub Gewichtungsanpassung_Entwicklung()
Rem read values of weighting
Dim P(9 To 12) As Variant
Dim Q(9 To 12) As Variant
For i = 9 To 12
P(i) = ActiveSheet.Cells(i, 16).Value
Q(i) = ActiveSheet.Cells(i, 17).Value
Next i
Rem Fallunterscheidungen
Rem Fall 3
If (P(9) = "") And (P(10) = "") And (P(11) = "") Then
Q(9) = ""
Q(10) = ""
Q(11) = ""
Q(12) = 100
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(9) = "") And (P(10) = "") And (P(12) = "") Then
Q(9) = ""
Q(10) = ""
Q(11) = 100
Q(12) = ""
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(9) = "") And (P(11) = "") And (P(12) = "") Then
Q(9) = ""
Q(10) = 100
Q(11) = ""
Q(12) = ""
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(10) = "") And (P(11) = "") And (P(12) = "") Then
Q(9) = 100
Q(10) = ""
Q(11) = ""
Q(12) = ""
Rem Werte ausgeben
GoTo ausgabe
End If
Rem Fall 2
If (P(9) = "") And (P(10) = "") Then
a = (Q(9) + Q(10)) / (Q(11) + Q(12))
Q(9) = ""
Q(10) = ""
Q(11) = Q(11) + (a * Q(11))
Q(12) = Q(12) + (a * Q(12))
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(9) = "") And (P(11) = "") Then
a = (Q(9) + Q(11)) / (Q(10) + Q(12))
Q(9) = ""
Q(11) = ""
Q(10) = Q(10) + (a * Q(10))
Q12 = Q(12) + (a * Q(12))
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(9) = "") And (P(12) = "") Then
a = (Q(9) + Q(12)) / (Q(10) + Q(11))
Q(9) = ""
Q(10) = Q(10) + (a * Q(10))
Q(11) = Q(11) + (a * Q(11))
Q(12) = ""
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(10) = "") And (P(11) = "") Then
a = (Q(10) + Q(11)) / (Q(9) + Q(12))
Q(9) = Q(9) + (a * Q(9))
Q(10) = ""
Q(11) = ""
Q(12) = Q(12) + (a * Q(12))
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(10) = "") And (P(12) = "") Then
a = (Q(10) + Q(12)) / (Q(9) + Q(11))
Q(9) = Q(9) + (a * Q(9))
Q(10) = ""
Q(11) = Q(11) + (a * Q(11))
Q(12) = ""
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(11) = "") And (P(12) = "") Then
a = (Q(11) + Q(12)) / (Q(9) + Q(10))
Q(9) = Q(9) + (a * Q(9))
Q(10) = Q(10) + (a * Q(10))
Q(11) = ""
Q(12) = ""
Rem Werte ausgeben
GoTo ausgabe
End If
Rem Fall 1
If (P(9) = "") Then
a = Q(9) / (Q(10) + Q(11) + Q(12))
Q(9) = ""
Q(10) = Q(10) + (a * Q(10))
Q(11) = Q(11) + (a * Q(11))
Q(12) = Q(12) + (a * Q(12))
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(10) = "") Then
a = Q(10) / (Q(9) + Q(11) + Q(12))
Q(9) = Q(9) + (a * Q(9))
Q(10) = ""
Q(11) = Q(11) + (a * Q(11))
Q(12) = Q(12) + (a * Q(12))
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(11) = "") Then
a = Q(11) / (Q(9) + Q(10) + Q(12))
Q(9) = Q(9) + (a * Q(9))
Q(10) = Q(10) + (a * Q(10))
Q(11) = ""
Q(12) = Q(12) + (a * Q(12))
Rem Werte ausgeben
GoTo ausgabe
End If
If (P(12) = "") Then
a = Q(12) / (Q(9) + Q(10) + Q(11))
Q(9) = Q(9) + (a * Q(9))
Q(10) = Q(10) + (a * Q(10))
Q(11) = Q(11) + (a * Q(11))
Q(12) = ""
Rem werte ausgeben
GoTo ausgabe
End If
ausgabe:
For k = 1 To 12
ActiveSheet.Cells(k, 16).Value = P(k)
ActiveSheet.Cells(k, 17).Value = Q(k)
Next k
End Sub
vielen Dank im VorausMFG
Christian