Ergebnis 1 bis 6 von 6

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

  1. #1
    Office-Hilfe.com - Neuling
    Registriert seit
    12.04.2019
    Beiträge
    3

    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

  2. #2
    Office-Hilfe.com - Profi
    Registriert seit
    24.11.2008
    Beiträge
    2.142
    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
    Liebe Grüße
    Anton Exl

    Windows 10 (x64)
    Office 2016 Professional Plus

  3. #3
    Office-Hilfe.com - Profi
    Registriert seit
    24.11.2008
    Beiträge
    2.142
    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
    Liebe Grüße
    Anton Exl

    Windows 10 (x64)
    Office 2016 Professional Plus

  4. #4
    Office-Hilfe.com - Neuling
    Registriert seit
    12.04.2019
    Beiträge
    3
    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

  5. #5
    Office-Hilfe.com - Neuling
    Registriert seit
    12.04.2019
    Beiträge
    3
    Hallo Anton,

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

    Viele Grüße

    Andreas

  6. #6
    Office-Hilfe.com - Profi
    Registriert seit
    24.11.2008
    Beiträge
    2.142
    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.
    Liebe Grüße
    Anton Exl

    Windows 10 (x64)
    Office 2016 Professional Plus

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  
Excel Ticker - News, Tipps und Tricks zu Microsoft Excel | SMS kostenlos versenden | Forenuser - Die Foren Findmaschine