Thema: einen BIS-Wert aus Tabelle auslesen (Office 2016)

1. einen BIS-Wert aus Tabelle auslesen

Hallo zusammen,

stehe wieder auf dem Schlauch.... .

Folgendes Problem:

In einer Abfrage habe ich eine Prozentwert.
In einer Tabelle habe ich mehrer Prozentbereiche und einen dazugehörigen Maluswert.

Hier ein Beispiel:

Prozentwert Abfrage: 93,21 %
Prozentbereiche Tabelle (zwei Spalten ( bis_Performance, Malus)):
bis_Performance: 92,00 % = Maluswert: -2 %
bis_Performance: 94,00 % = Maluswert: -1,5 %
bis_Performance: 96,00 % = Maluswert: -1,0 %

Der Prozentwert der Anfrage liegt im Bereich des Maluswertes - 1,5 %.

Mein Ziel ist es nun, dass in der Abfrage zu jedem Prozentwert, der entsprechende Maluswert angezeigt wird.

Wie bekomme ich das am Einfachsten hin?

Vielen Dank im Voraus

Andreas  Zitieren

2. Hallo Andreas,

das erreicht man am einfachsten, wenn man in einem allgemeinen Codemodul eine benutzerdefinierte Funktion eingibt (Einfach folgendes Code-Fenster kopieren und in einem allgemeinen Codemodul in Access einfügen):
Code:
```Option Explicit

Public Function MalusWert(Prz As Double) As Double
Select Case Prz
Case Is < 92: MalusWert = -2#
Case Is < 94: MalusWert = -1.5
Case Is < 96: MalusWert = -1#
Case Else:    MalusWert = 0#
End Select
End Function

Public Function MalusWert2(Prz As Double) As Double
MalusWert2 = Switch(Prz <= 92, -2, Prz <= 94, -1.5, Prz <= 96, -1, True, 0)
End Function```
Ich habe dir hier 2 Varianten angeboten, eine davon kannst du dann verwenden: MalusWert(Prz) und MalusWert2(Prz).
Beide können in gleicher Weise angewandt werden. Der Übergabeparameter "Prz" für die Höhe der Abfrageprozente erwartet dabei, dass zB. bei einem Wert von 93,21% folgender Funktionsaufruf
MalusWert(93.21) bzw. MalusWert2(93.21)
durchgeführt wird. Beide Funktionen geben dann den Wert -1.5 zurück, der für -1,5% steht.

Wenn du also zB. im Direktbereichsfenster folgende Zeile eingibst:
?MalusWert(94.01), MalusWert2(94.01)
für 94,01% erhältst du als Resultat
-1 -1

oder bei einer Eingabe von
?MalusWert(97.05), MalusWert2(97.05)
für 97,05% ist das Ergebnis
0 0  Zitieren

3. Hallo Andreas,

bei der 1. Funktion hat sich leider ein kleiner Fehler eingeschlichen, beide Funktion müssen korrekt lauten wie folgt:
Code:
```Option Explicit

Public Function MalusWert(Prz As Double) As Double
Select Case Prz
Case Is <= 92: MalusWert = -2#
Case Is <= 94: MalusWert = -1.5
Case Is <= 96: MalusWert = -1#
Case Else:    MalusWert = 0#
End Select

End Function

Public Function MalusWert2(Prz As Double) As Double
MalusWert2 = Switch(Prz <= 92, -2, Prz <= 94, -1.5, Prz <= 96, -1, True, 0)
End Function```  Zitieren

4. Hallo Anton,

leider war ich die letzten Wochen extrem eingespannt, so dass ich erst jetzt dazu gekommen bin, Deinen Code zu testen.

Habe beide Varianten probiert und leider war das Ergebnis nicht korrekt.

Die Codes habe ich so eingegeben:
Public Function MalusWert2(Prz As Double) As Double
MalusWert2 = Switch(Prz <= 82, -5, Prz <= 84, -4.5, Prz <= 86, -4, Prz <= 88, -3.5, Prz <= 90, -3, Prz <= 92, 2.5, Prz <= 94, -2, Prz <= 96, -1.5, Prz <= 98.49, -1, Prz <= 96, -1, True, 0)
End Function

Option Compare Database
Option Explicit

Public Function MalusWert(Prz As Double) As Double
Select Case Prz
Case Is <= 82: MalusWert = -5#
Case Is <= 84: MalusWert = -4.5
Case Is <= 86: MalusWert = -4#
Case Is <= 88: MalusWert = -3.5
Case Is <= 90: MalusWert = -3#
Case Is <= 92: MalusWert = -2.5
Case Is <= 94: MalusWert = -2#
Case Is <= 96: MalusWert = -1.5
Case Is <= 98, 49: MalusWert = -1#
Case Else: MalusWert = 0#
End Select
End Function
Bei beiden Varianten sieht das Ergebnis so aus:
Mauls.png

Kannst Du bitte nochmals schauen, ob ich einen Fehler mache und diesen nur nicht sehe....:-(.

Vielen Dank im Voraus für Deine Hilfe

Andreas  Zitieren

5. Hallo Anton,

der Vollständigkeit halber, hier noch der Bezug aus der Abfrage:
qry_Mauls.png

Viele Grüße

Andreas  Zitieren

6. Hallo Andreas,

Habe beide Varianten probiert und leider war das Ergebnis nicht korrekt.
Bei beiden Varianten sieht das Ergebnis so aus: perf_malus=90,57% --> Malus:MalusWert2([perf_malus])=-5, usw.
Kann es sein, dass dein Tabellenfeld "perf_malus", das du in deiner Abfrage verwendest, zB. als "Double" festgelegt ist mit Format "Prozentzahl"?
Dann wird zwar im Feld "perf_malus" zB. 90,57% angezeigt. Sobald du aber diesen Wert in der Abfrage an die Funktion "MalusWert2([perf_malus])" übergibst, findet dort tatsächlich folgender Funktionsaufruf statt: "MalusWert2(0.9057)". Damit erhält der Parameter "Prz" der Funktion "MalusWert2(Prz)" den Wert 0.9057, der weit unter dem niedrigsten Wert 82 der dort enthaltenen "Switch(Prz<=82,-5, ...)"-Funktion liegt - was somit auch die generelle Wertrückgabe von -5 in der Abfrage erklärt.

Es gibt jetzt 3 Möglichkeiten:
1) die einfachste Möglichkeit: Du änderst in der Abfrage den Funktionsaufruf auf "Malus: MalusWert2(100*[perf_malus])"
2) die zweiteinfachste Möglichkeit: Du änderst die Formatierung des Feldes "perf_malus" zB. auf "Standardzahl" und gibst als Feldwerte zB. 90.57 ein. Dann kannst du in der Abfrage deinen bisherigen Aufruf "Malus: MalusWert2([perf_malus])" belassen.
3) die umständlichste Möglichkeit: Du änderst die Werte in den VBA-Makro-Funktionen: zB. änderst du "Prz <=82" auf "Prz <= 0.82", usw.  Zitieren

Stichworte

malus, performance  Berechtigungen

• Neue Themen erstellen: Nein
• Themen beantworten: Nein