Kein Problem. Hier die FUnktion, die nicht funktioniert, zu Hause aber schon. Peinlich und echt lang:
die Teile "Preisgruppe" und "Festpreis" funktionieren, "Standardmaske" und "Prozenmaske" nicht
Kann ich das überhaupt jemanden zumuten?Public Function MW(Maskengruppe As Integer, Maskennummer As Integer, MF, SG As Single, PG As Single)
Dim PGAbzug As Single
Dim GAbzug As Single
Dim MFAbZu As Single
Dim MaZeile As Long
Dim MFZeile As Long
Dim SyGZeile As Long
Dim SGZeile As Long
' Maskenzeile in GMaske1 identifizieren
MaZeile = 2
MaAnfang:
If Sheets("GMaske1").Cells(MaZeile, 1) = Maskengruppe And Sheets("GMaske1").Cells(MaZeile, 2) = Maskennummer Then GoTo MaEnde
MaZeile = MaZeile + 1
GoTo MaAnfang
MaEnde:
' Standardmaske?
If Sheets("GMaske1").Cells(MaZeile, 1) = Maskengruppe And Sheets("GMaske1").Cells(MaZeile, 2) = Maskennummer And Sheets("GMaske1").Cells(MaZeile, 11) = "N" And Sheets("GMaske1").Cells(MaZeile, 12) = "N" And Sheets("GMaske1").Cells(MaZeile, 13) = "N" Then GoTo Standardmaske
' reine PG-Maske?
If Sheets("GMaske1").Cells(MaZeile, 1) = Maskengruppe And Sheets("GMaske1").Cells(MaZeile, 2) = Maskennummer And Sheets("GMaske1").Cells(MaZeile, 11) = "N" And Sheets("GMaske1").Cells(MaZeile, 12) = "J" And Sheets("GMaske1").Cells(MaZeile, 13) = "N" Then GoTo PGMaske
' Prozentmaske?
If Sheets("GMaske1").Cells(MaZeile, 1) = Maskengruppe And Sheets("GMaske1").Cells(MaZeile, 2) = Maskennummer And Sheets("GMaske1").Cells(MaZeile, 11) = "N" And Sheets("GMaske1").Cells(MaZeile, 12) = "N" And Sheets("GMaske1").Cells(MaZeile, 13) = "J" Then GoTo Prozentmaske
' Festpreismaske?
If Sheets("GMaske1").Cells(MaZeile, 1) = Maskengruppe And Sheets("GMaske1").Cells(MaZeile, 2) = Maskennummer And Sheets("GMaske1").Cells(MaZeile, 11) = "J" And Sheets("GMaske1").Cells(MaZeile, 12) = "N" And Sheets("GMaske1").Cells(MaZeile, 13) = "N" Then GoTo FPMaske
Standardmaske:
' vor "Systemgrenzen-Zeile identifizieren" muss ich, weil 120 dort nicht reinpasst, zu 119,999 machen (später bitte edler)
If SG = 120 Then SG = 119.999
' Systemgrenzen-Zeile identifizieren
SyGZeile = 2
StandardSyGAnfang:
If Sheets("GMaske2").Cells(SyGZeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(SyGZeile, 2) = Maskennummer And Sheets("GMaske2").Cells(SyGZeile, 3) = "S" And Sheets("GMaske2").Cells(SyGZeile, 7) <= SG And Sheets("GMaske2").Cells(SyGZeile, 8) > SG Then GoTo StandardSyGEnde
SyGZeile = SyGZeile + 1
GoTo StandardSyGAnfang
StandardSyGEnde:
' Systemgrenzen, MF korrigieren
If Sheets("GMaske2").Cells(SyGZeile, 9) > MF Then MF = Sheets("GMaske2").Cells(SyGZeile, 9)
If Sheets("GMaske2").Cells(SyGZeile, 10) < MF Then MF = Sheets("GMaske2").Cells(SyGZeile, 10)
' im Optimalgewicht? (kommt jetzt erst, weil ich bei og genau über GewAbzüge springen muss)
If Sheets("GMaske1").Cells(MaZeile, 7) <= SG And Sheets("GMaske1").Cells(MaZeile, 8) > SG Then GoTo StandardOGEnde
' wichtig: OGTiere nach OGEnde leiten!!!!
' Gewicht-Zeile identifizieren
SGZeile = 2
StandardSGAnfang:
If Sheets("GMaske2").Cells(SGZeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(SGZeile, 2) = Maskennummer And Sheets("GMaske2").Cells(SGZeile, 3) = "G" And Sheets("GMaske2").Cells(SGZeile, 7) <= SG And Sheets("GMaske2").Cells(SGZeile, 8) > SG Then GoTo StandardSGEnde
SGZeile = SGZeile + 1
GoTo StandardSGAnfang
StandardSGEnde:
' Gewichtsabzüge
' Übergewichtsabzüge: wenn ich also in einem Intervall oberhalb des OGs liege
If Sheets("GMaske2").Cells(SGZeile, 8) > Sheets("GMaske1").Cells(MaZeile, 8) Then GAbzug = Sheets("GMaske2").Cells(SGZeile, 14) + (SG - Sheets("GMaske2").Cells(SGZeile, 7)) * Sheets("GMaske2").Cells(SGZeile, 13)
' Untergewichtsabzüge: wenn ich also in einem Intervall unterhalb des OGs liege
If Sheets("GMaske2").Cells(SGZeile, 7) < Sheets("GMaske1").Cells(MaZeile, 7) Then GAbzug = Sheets("GMaske2").Cells(SGZeile, 14) + (Sheets("GMaske2").Cells(SGZeile, 8) - SG) * Sheets("GMaske2").Cells(SGZeile, 13)
GoTo StandardSGEnde2
StandardOGEnde:
GAbzug = 0
StandardSGEnde2:
' Muskelfleisch-Zeile identifizieren
MFZeile = 2
StandardMFAnfang:
If Sheets("GMaske2").Cells(MFZeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(MFZeile, 2) = Maskennummer And Sheets("GMaske2").Cells(MFZeile, 3) = "M" And Sheets("GMaske2").Cells(MFZeile, 5) <= MF And Sheets("GMaske2").Cells(MFZeile, 6) >= MF Then GoTo StandardMFEnde
MFZeile = MFZeile + 1
GoTo StandardMFAnfang
StandardMFEnde:
' später vielleicht: wird erst 0 gesetzt, falls MF gleich BasisMFAbZu = 0
' Muskelfleischzuschlag: wenn ich also in einem Intervall oberhalb der Basis liege
If Sheets("GMaske2").Cells(MFZeile, 6) > Sheets("GMaske1").Cells(MaZeile, 6) Then MFAbZu = Sheets("GMaske2").Cells(MFZeile, 14) + (MF - Sheets("GMaske2").Cells(MFZeile, 5)) * Sheets("GMaske2").Cells(MFZeile, 13)
' Muskelfleischabzug: wenn ich also in einem Intervall unterhalb der Basis liege
If Sheets("GMaske2").Cells(MFZeile, 5) < Sheets("GMaske1").Cells(MaZeile, 6) Then MFAbZu = Sheets("GMaske2").Cells(MFZeile, 14) + (Sheets("GMaske2").Cells(MFZeile, 6) - MF) * Sheets("GMaske2").Cells(MFZeile, 13)
' Standardmaske verlassen
PGAbzug = 0
GoTo Maskenwert
PGMaske:
Dim PG1Zeile As Long
Dim PG2Zeile As Long
Dim PG1 As Single
Dim PG2 As Single
Dim PG1Abzug As Single
Dim PG2Abzug As Single
Dim Zwischen As Single
' Preisgruppe
' PG-Zeile identifizieren
PG1 = Application.WorksheetFunction.RoundDown(PG, 0)
'PG1 = "=RoundDown(PG, 0)"
PG2 = PG1 + 1
Zwischen = PG - PG1
PG1Zeile = 2
PGPG1Anfang:
If Sheets("GMaske2").Cells(PG1Zeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(PG1Zeile, 2) = Maskennummer And Sheets("GMaske2").Cells(PG1Zeile, 3) = "P" And Sheets("GMaske2").Cells(PG1Zeile, 4) = PG1 Then GoTo PGPG1Ende
PG1Zeile = PG1Zeile + 1
GoTo PGPG1Anfang
PGPG1Ende:
' Preisgruppenabzug1:
PGAbzug1 = Sheets("GMaske2").Cells(PG1Zeile, 14) + Sheets("GMaske2").Cells(PG1Zeile, 13)
PG2Zeile = 2
PGPG2Anfang:
If Sheets("GMaske2").Cells(PG2Zeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(PG2Zeile, 2) = Maskennummer And Sheets("GMaske2").Cells(PG2Zeile, 3) = "P" And Sheets("GMaske2").Cells(PG2Zeile, 4) = PG2 Then GoTo PGPG2Ende
PG2Zeile = PG2Zeile + 1
GoTo PGPG2Anfang
PGPG2Ende:
' Preisgruppenabzug2:
PGAbzug2 = Sheets("GMaske2").Cells(PG2Zeile, 14) + Sheets("GMaske2").Cells(PG2Zeile, 13)
PGAbzug = (1 - Zwischen) * PGAbzug1 + Zwischen * PGAbzug2
' PGMaske verlassen
MFAbZu = 0
GAbzug = 0
GoTo Maskenwert
Prozentmaske:
' im Optimalgewicht? (kommt jetzt, weil OG hier nicht bei Systemgrenzem dabei ist, aber wenn ja, bitte über GewAbzüge springen)
If Sheets("GMaske1").Cells(MaZeile, 7) <= SG And Sheets("GMaske1").Cells(MaZeile, 8) >= SG Then GoTo ProzentMuskelfleisch
' siehe Umleitung: OGTiere (kein GAbzug) zum Muskelfleisch leiten
' "Systemgrenzen"-Zeile identifizieren
SyGZeile = 2
ProzentSyGAnfang:
If Sheets("GMaske2").Cells(SyGZeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(SyGZeile, 2) = Maskennummer And Sheets("GMaske2").Cells(SyGZeile, 3) = "S" And Sheets("GMaske2").Cells(SyGZeile, 7) <= SG And Sheets("GMaske2").Cells(SyGZeile, 8) > SG Then GoTo ProzentSyGEnde
SyGZeile = SyGZeile + 1
GoTo ProzentSyGAnfang
ProzentSyGEnde:
' Gewicht-Zeile identifizieren
SGZeile = 2
ProzentSGAnfang:
If Sheets("GMaske2").Cells(SGZeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(SGZeile, 2) = Maskennummer And Sheets("GMaske2").Cells(SGZeile, 3) = "G" And Sheets("GMaske2").Cells(SGZeile, 7) <= SG And Sheets("GMaske2").Cells(SGZeile, 8) > SG Then GoTo ProzentSGEnde
SGZeile = SGZeile + 1
GoTo ProzentSGAnfang
ProzentSGEnde:
' Gewichtsabzüge
GAbzug = Sheets("GMaske2").Cells(SyGZeile, 13) * (Sheets("GMaske2").Cells(SGZeile, 15) / 100)
' Umleitung
GoTo ProzentMuskelfleisch2
ProzentMuskelfleisch:
GAbzug = 0
ProzentMuskelfleisch2:
' Muskelfleisch-Zeile identifizieren
MFZeile = 2
ProzentMFAnfang:
If Sheets("GMaske2").Cells(MFZeile, 1) = Maskengruppe And Sheets("GMaske2").Cells(MFZeile, 2) = Maskennummer And Sheets("GMaske2").Cells(MFZeile, 3) = "M" And Sheets("GMaske2").Cells(MFZeile, 5) <= MF And Sheets("GMaske2").Cells(MFZeile, 6) >= MF Then GoTo ProzentMFEnde
MFZeile = MFZeile + 1
GoTo ProzentMFAnfang
ProzentMFEnde:
' Muskelfleischabzüge und -zuschläge
' später vielleicht: wird erst 0 gesetzt, falls MF gleich BasisMFAbZu = 0
' Muskelfleischzuschlag: wenn ich also in einem Intervall oberhalb der Basis liege
If Sheets("GMaske2").Cells(MFZeile, 6) > Sheets("GMaske1").Cells(MaZeile, 6) Then MFAbZu = Sheets("GMaske2").Cells(MFZeile, 14) + (MF - Sheets("GMaske2").Cells(MFZeile, 5)) * Sheets("GMaske2").Cells(MFZeile, 13)
' Muskelfleischabzug: wenn ich also in einem Intervall unterhalb der Basis liege
If Sheets("GMaske2").Cells(MFZeile, 5) < Sheets("GMaske1").Cells(MaZeile, 6) Then MFAbZu = Sheets("GMaske2").Cells(MFZeile, 14) + (Sheets("GMaske2").Cells(MFZeile, 6) - MF) * Sheets("GMaske2").Cells(MFZeile, 13)
' Prozentmaske verlassen
PGAbzug = 0
GoTo Maskenwert
FPMaske:
' Festpreismaske sofort verlassen
MFAbZu = 0
GAbzug = 0
PGAbzug = 0
GoTo Maskenwert
Maskenwert:
MW = MFAbZu + GAbzug + PGAbzug
End Function