Office: (Office 2019) VBA Lösung für Excel Formel

Helfe beim Thema VBA Lösung für Excel Formel in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Ich habe in einer Access Datenbank u.a. einen(!) Datensatz mit 4 Feldern, die je nach der Höhe deren Inhalt in einem 2. Feld unterschiedlich bewertet... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Herbert2241, 7. März 2021.

  1. Herbert2241 Erfahrener User

    VBA Lösung für Excel Formel


    Ich habe in einer Access Datenbank u.a. einen(!) Datensatz mit 4 Feldern, die je nach der Höhe deren Inhalt in einem 2. Feld unterschiedlich bewertet werden sollen. Beispiel:
    Feld1 = 150, Feld2 = 140, Feld3 = 130 und Feld 4 = 120
    Pkt 1 = 4,0 Pkt2 = 3,0 Pkt 3 = 2,0 und Pkt4 = 1,0. Das Problem dabei ist aber dass die Feldinhalte nie in dieser Grössenreihenfolge sind.Es muss immer der höchste Wert mit 4, der zweithöchste Wert mit 3 usw. bewertet werden.
    Im Excel funktiert das mit der Formel (z.b. im Feld1 =
    =Wenn([Satz1_1G]="";"";1 und Wenn([Satz1_1G] > [Satz1_2G;1;Wenn([Satz1_G] = [Satz1_2G],0,5;0))+Wenn([Satz1_G]> [Satz1_3G];1;Wenn([Satz1_1] = [Satz1_3G];0,5;0))+Wenn([Satz1_1G] > [Satz1_4G];1;Wenn([Satz1_1G] = [Satz1_4G];0,5;0)))
    Kann mir da wer das in VBA für Access übersetzen??
    Vielen Dank für Eure Hilfe
     
    Herbert2241, 7. März 2021
    #1
  2. Exl121150 Erfahrener User
    Hallo,

    zuerst nehme ich Bezug auf deinen Excel-Formel-Vergleich:
    Angenommen im Zellbereich A1:D1 befinden sich die 4 Zellen mit dem Werte-Array, z.B.VBA Lösung für Excel Formel :(150,140,130,120).
    Im Zellbereich A2:D2 befinde sich der Formelbereich für die Rangnummern-Ermittlung:
    A2:=RANG.MITTELW(A$1;$A$1:$D$1;1)
    ....
    D2:
    =RANG.MITTELW(D$1;$A$1:$D$1;1)
    dann liefern diese 4 Funktion im Bereich B2:D2 den Rangnummern-Array (4, 3, 2, 1).

    Diese Rangnummernfunktion für Rangnummern, falls das Werte-Array in A1:D1 aufsteigend sortiert wäre, habe ich dir in der folgenden VBA-Funktion nachgebildet:
    Code:
    Public Function RangMittelw(Nr As Long, ParamArray FeldWrt() As Variant) As Single
      Dim lB As Integer, uB As Integer
      Dim I As Integer, J As Integer, Rang As Single, Wrt As Variant
     
      On Error GoTo Err_RangM
      lB = 0: uB = UBound(FeldWrt)
      RangMittelw = 0!
     
      I = Nr - 1
      Rang = 1: Wrt = FeldWrt(I)
      For J = lB To uB
        If I <> J Then
           If Wrt > FeldWrt(J) Then
              Rang = Rang + 1
           ElseIf Wrt = FeldWrt(J) Then
              Rang = Rang + 0.5
           End If
        End If
      Next J
     
      RangMittelw = Rang
    Err_RangM:
    End Function
    
    
    Wenn deine Feldnamen, die die (numerischen) Feldwerte enthalten, zB. heißen: Feld1, FeldA, FeldX, Feld4
    dann liefert zB. folgender Funktionsaufruf: RangMittelw(2, Feld1, FeldA, FeldX, Feld4)
    die Rangnummer des 2.Feldes in der Parameterliste (=FeldA) zurück, falls die Werte der 4 Felder aufsteigend sortiert wären.
    Ein Funktionsaufruf wie zB. RangMittelw(1, 150, 140, 130, 120) ergibt als Resultat 4

    Kommen in der Feldliste mehrere gleiche Werte vor, wird jeweils der Mittelwert dieser Werte zur Rangangabe herangezogen.
    (deshalb der Funktionsname: RangMittelw(..)):
    Ein Funktionsaufruf wie zB. RangMittelw(2, 140, 140, 130, 120) ergibt als Resultat 3.5

    Die Funktion funktioniert auch mit 5 oder 3 Werten oder auch mit 10 Werten in der Parameterliste.
    Die Abfrage-Nummer (=Nr), also der 1. Parameter, muss im Bereich 1 ... Feldanzahl liegen, ansonsten liefert die Funktion 0 zurück.
     
    Exl121150, 7. März 2021
    #2
  3. Herbert2241 Erfahrener User
    Danke Anton, werde ich demnächst ausprobieren und melde mich wieder (komme wahrscheinlich erst am Dienstag dazu)
     
    Herbert2241, 7. März 2021
    #3
  4. Herbert2241 Erfahrener User

    VBA Lösung für Excel Formel

    Hallo Anton, wie speichere ich ein neues Modul
     
    Herbert2241, 14. März 2021
    #4
  5. Exl121150 Erfahrener User
    Hallo,

    1. indem du im Menüband > Tabulator "Datenbanktools" > Gruppe "Makro" > Button "Visual Basic" anklickst, öffnet sich der VBA-Editor (mit mehreren Teilfenstern).
    2. Falls dort das Fenster mit der Kopfzeile "Projekt - DateiNameXYZ" (wobei DateiNameXYZ der Name deiner aktuellen Datenbankdatei ist) nicht zu sehen ist, drückst du die Tastenkombination Strg+R.
    3. Es gibt im Projektfenster (siehe Punkt 2)) eine Auflistung der enthaltenen Microsoft Access Klassenobjekte (Formularobjekte, Berichtobjekte, etc.) und eventuell auch weitere Auflistungen von Objekttypen (Klassenmodule, Module), sofern welche davon enthalten sind.
    4. Um neue Objekte im Projektfenster hinzuzufügen, machst du einen Rechtsklick im Projektfenster, sodass sich das Kontextmenü des Projektfensters öffnet: In diesem zeigst du mit der Maus auf den Eintrag "Einfügen", sodass das Untermenü mit den Einträgen "Modul" und "Klassenmodul" angezeigt wird, wobei du den Eintrag "Modul" auswählst, indem du darauf klickst.
    5. Dadurch öffnet sich ein großes Editorfenster, das zur Eingabe von VBA-Code bestimmt ist.
      • a) Indem du meinen VBA-Code aus meinem letzten Posting (grauer Bereich ohne das Wort "Code:") mit der Maus markierst
      • b) Diesen in die Zwischenablage von Windows kopierst mit der Tastenkombination Strg+C
      • c) Danach klickst du wieder in das VBA-Code-Editorfenster (von Punkt 5)
      • d) in das du den Code aus der Zwischenablage einfügst, indem du die Tastenkombination Strg+V drückst.
      • Es ist jetzt mein VBA-Code für die Public Function RangMittelw(...) enthalten
    6. Der VBA-Editor enthält unterhalb der Kopfzeile "Microsoft Visual Basic for Applications - Modul ..." eine Menüzeile,
      • a) Indem du im VBA-Menü auf den Tabulator "Debuggen" klickst, dann den Befehl "Kompilieren von DateiNameXYZ" auswählst, so werden die enthaltenen VBA-Makros kompiliert
      • b) Falls es im Punkt 6a) keinen Protest des Kompilers gibt (was zu erwarten ist), kannst du das Ganze auch in die Datenbankdatei speichern, indem du die Tastenkombination Strg+S drückst.
    Auch ohne den Punkt 6a) explizit ausgeführt zu haben, kann man das VBA-Makro etc. speichern bzw. steht es zur Ausführung bereit, sofern dort keine Fehler enthalten sind. Denn im fehlerfreien Fall erfolgt die Kompilierung quasi "on demand" im Hintergrund - automatisch.
     
    Exl121150, 14. März 2021
    #5
  6. Herbert2241 Erfahrener User
    Es ist jetzt ein Schritt weiter. Ich konnte das Modul unter dem Namen "Rangliste" speichern. Im entsprechenden Formular habe ich jetzt eine Schaltfläche eingerichtet die so aussieht:
    Private Sub Befehl198_Click()

    RangMittelw(1, [Satz1_1], [Satz1_2], [Satz1_3], [Satz1_4]) = [Pkt1_1], wobei die Felder "Satz1_1" usw. genau die Feldnamen der Felder mit den zu bewerteten Grössen. In den Feldern "Punkt1_1" bis "Punkt!_4" sollen jetzt die Werte
    je nach Höhe der Feldwerte "Satz1_1" eingestellt werden. Beim Klick auf diese Schaltfläche kommt aber jetzt eine Fehlermeldung "Fehler beim Kompilieren" - Funktionsaufruf auf der linken Seite der Zuweisung muss den Typ Variant oder Object zurückgeben. Was ist dabei jetzt falsch ???
     
    Herbert2241, 15. März 2021
    #6
  7. Exl121150 Erfahrener User
    Hallo,

    in der beiliegenden Access-Datenbankdatei habe ich dir eine Mini-Datenbank eingefügt, bestehend aus:
    - einer Tabelle "Tabelle1"
    - einem Formular "FormTabelle1" (enthält Makros für die 7 enthaltenen Buttons)
    - einem allgem.Codemodul "Modul1_Funktionen" (enthält Makro "RangMittlew(...))

    Die Tabelle "Tabelle1" sieht folgendermaßen aus:
    VBA Lösung für Excel Formel upload_2021-3-16_11-21-50.png
    Die Formularfelder (ID, Feld1, Feld2, Feld3, Feld4) sind an gleichnamigen Felder von "Tabelle1" gebunden, dh. sie beziehen zwingend ihre Werte aus den Tabellenfeldern.
    VBA Lösung für Excel Formel upload_2021-3-16_11-44-57.png
    Dagegen sind die Formularfelder (Feld1Rang, Feld2Rang, Feld3Rang, Feld4Rang) berechnete Felder, dh. sie enthalten die besagte Rangfunktion, wie du in den Eigenschaftseinstellungen dieser Felder ersehen kannst.
    VBA Lösung für Excel Formel upload_2021-3-16_11-45-40.png

    Die 7 Buttons dienen im Formular zum Navigieren in der Tabelle bzw. zum Erzeugen/Löschen/Speichern von Sätzen der Tabelle.
     
    Exl121150, 16. März 2021
    #7
  8. Herbert2241 Erfahrener User

    VBA Lösung für Excel Formel

    Habe die Datenbank geöffnet. Wenn ich einen der Button im formular betätige kommt die Meldung "Fehler beim Kompilieren, Project oder Bibliothek nicht gefunden und die Zeile "MsgBox Error$" in den Ereignisprozeduren wird angemeckert. Wenn ich dann in den Ereignisprozeduren "Extra" anklicke sind die Verweise nicht eingabebereit.
     
    Herbert2241, 16. März 2021
    #8
  9. Herbert2241 Erfahrener User
    Ich habe jetzt alles in echt ausprobiert. Du bist echt ein Hammer, es funktioniert tadellos. Vielen, vielen Dank dafür.
    Darf ich Dich jetzt noch eines fragen ?
    Ich verwende Access 2019, da kann man jetzt auch wieder Diagramme erstellen. Das funktioniert auch einwandfrei. Ich habe ein Balkendiagramm erstellt, dass auch die zugrundeliegenden Werte korrekt anzeigt. Jetzt hätte ich noch gerne, dass jeder Balken eine andere Farbe hat, das klappt aber noch nicht. Jeder Balken hat die gleiche Farbe. Wo muss ich da ansetzen??
    Danke
     
    Herbert2241, 16. März 2021
    #9
  10. Herbert2241 Erfahrener User
    Ich habe fast ein wenig zu früh geschrieen. Bis auf eine Tatsache funktioniert es ja wirklich super. Nur ein Problem gibt es noch.
    Du musst dir das so vorstellen: Das ganze passiert als Bewertung eines Spieles von 4 Mannschaften mit 6 Spielern zu je 4 Sätzen: d.h.
    Manschaft 1 Mannschaft 2 Mannschaft 3 Mannschaft 4
    Spieler1 Satz1_1 Punkt1_1 Spieler1 Satz1_2 Punkt1_2 Spieler1 Satz1_3 Punkt1_3 Spieler1 Satz1_4 Punkt1_4
    Spieler1 Satz2_1 Punkt2_1 Spieler1 Satz2_2 Punkt2_2 Spieler1 Satz2_3 Punkt2_3 Spieler1 Satz2_4 Punkt2_4
    Spieler1 Satz3_1 Punkt3_1 Spieler1 Satz3_2 Punkt3_2 Spieler1 Satz3_3 Punkt3_3 Spieler1 Satz3_4 Punkt3_4
    Spieler1 Satz4_4 Punkt4_1 Spieler1 Satz4_2 Punkt4_2 Spieler1 Satz4_3 Punkt4_3 Spieler1 Satz4_4 Punkt4_4

    Diese Felder stehen alle in einem Datensatz und auf dieser Ebene funktioniert das Ganze ja wunderbar. Am Ende des Spieles der 1. Spieler werden jeweils die Punkte 1_1, 2_1, 3_1 und 4_1 addiert und die Summe im Feld MP1 bis MP4 ausgewiesen
    MP1 = summe Punk1_1 bis 4_1 für die Mannschaft 1, MP2 = Summe Punkt1_2 bis 4_2 usw. MP3 und MP4.
    Jetzt erhält wieder das höchste Feld von MP1 - MP4 4 Punkte usw.
    Und das funktioniert mit deinem Modul nicht, oder ich mache was falsch
    lg Herbert2241
     
    Herbert2241, 16. März 2021
    #10
  11. Exl121150 Erfahrener User
    Hallo,

    erstens verstehe ich das geschilderte Spielsystem nicht,
    zweitens war von so etwas bisher überhaupt nicht die Rede,
    drittens daher kann ich dazu überhaupt nichts sagen - und ich muss leider passen.
     
    Exl121150, 16. März 2021
    #11
  12. Herbert2241 Erfahrener User
    Schade, aber trotzdem vielen Dank für Deine Mühe. Ich habe versucht, im beiliegenden Screenshot Dir die Funktionsweise der Bewertung darzustellen. Ich hoffe, das ist für Dich verständlicher.
     
    Herbert2241, 17. März 2021
    #12
  13. Herbert2241 Erfahrener User

    VBA Lösung für Excel Formel

    Hallo Anton, tut mir sehr leid, dass ich wieder einmal zu früh geschrieen habe. Es funktioniert auch dort wo ich zuerst geglaubt habe, dass dem nicht so ist. Trotzdem vielen Dank für Deine Mühe.
     
    Herbert2241, 18. März 2021
    #13
Thema:

VBA Lösung für Excel Formel

Die Seite wird geladen...
  1. VBA Lösung für Excel Formel - Similar Threads - VBA Lösung Excel

  2. VBA Lösung gesucht

    in Microsoft Excel Hilfe
    VBA Lösung gesucht: Guten Tag zusammen. Ich bin neu hier und auch sehr neu was VBA angeht und bin dabei zu lernen. Ich benötige für ein Projekt auf der Arbeit nun folgende Lösung. Ich möchte gerne Per Inputbox...
  3. Verständnisfrage und Lösung für Namensliste (VBA)

    in Microsoft Excel Hilfe
    Verständnisfrage und Lösung für Namensliste (VBA): Salü zäme, ich bin neu hier und versuche mich an VBA. Grundkenntnisse sind vorhanden, dennoch stehe ich vor einem Problem, wo meine Logik im Moment aussetzt... Ich habe eine Namensliste auf...
  4. verteilung Formel oder VBA Lösung

    in Microsoft Excel Hilfe
    verteilung Formel oder VBA Lösung: Hilfe bitte. ich will eine Auftragssumme durch datum Differenz teilen und in richtigen Monat einfugen. ich habe es mit dieser Formel probiert aber irgendwie klappt es nicht. er muss die summe so...
  5. VBA Lösung Einkauf/Verkauf Erlös

    in Microsoft Excel Hilfe
    VBA Lösung Einkauf/Verkauf Erlös: Salve liebe Forenmitglieder =) Nachdem ich selbstredend VOR dem erstellen einer Frage etliche Stunden im Internet geforstet habe und dennoch nicht auf meine Lösung kam, wollte ich einfach mal...
  6. Frontend-Backend-Lösung für Excel

    in Microsoft Excel Hilfe
    Frontend-Backend-Lösung für Excel: Hallo! Ich habe eine Frontend-Backend-Lösung für Excel entwickelt, die vielleicht auch für Andere interessant ist. Was meine ich damit? Die Aufgabenstellung Mehrere Nutzer sollen gleichzeitig mit...
  7. Makro? VBA? Sortieren geht nicht, brauche bitte Hilfe bei der Lösung

    in Microsoft Excel Hilfe
    Makro? VBA? Sortieren geht nicht, brauche bitte Hilfe bei der Lösung: Einen wunderschönen "Guten Tag", nachdem letzte Saison mein Problem ungelöst blieb muss es dieses Jahr was werden ... Ich habe eine Excel 2003 Tabelle mit mehreren, identischen...
  8. Dreifach "wenn" Abfrage mit VBA- gibt es eine bessere Lösung?

    in Microsoft Excel Hilfe
    Dreifach "wenn" Abfrage mit VBA- gibt es eine bessere Lösung?: Hallo, ich möchte aus einer Tabelle eine bestimmt Zelle finden, mit VBA. Meine Vorgehensweise aktuell: for Zeile= lng to 2 step -1 If Cells(Zeile, 1)= "999" and Cells(Zeile, 2) = "666"...
Schlagworte:
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden