Office Forum
www.Office-Loesung.de
Access :: Excel :: Outlook :: PowerPoint :: Word :: Office :: Wieder Online ---> provisorisches Office Forum <-
Wenn -Dann -Funktionen
zurück: Summe von einem Unterformular weiter: Neu Formular Unbeantwortete Beiträge anzeigen
Neues Thema eröffnen   Neue Antwort erstellen     Status: Feedback Facebook-Likes Diese Seite Freunden empfehlen
Zu Browser-Favoriten hinzufügen
Autor Nachricht
Fiolax
Im Profil kannst Du frei den Rang ändern


Verfasst am:
02. März 2004, 19:41
Rufname:
Wohnort: Südhessen

Wenn -Dann -Funktionen - Wenn -Dann -Funktionen

Nach oben
       

Hallo,
kann mir einer Helfen und mitteilen wie ich folgende Rechnung, die in Excel einwandfrei funktioniert, in einem Access-Formular eingeben muß?

=wenn x*y/z +a >b dann x*y/z -0,1, wenn x*y/z +a <b dann x*y/z+0,1, sonst x*y/z

Die Variablen stehen für die Felder im Formular. Der einfachkeit halber habe ich die Formel vereinfacht dargestellt. Richtig im Excel lautet sie:

=wenn(((x*y/z +a)>b;x*y/z -0,1);wenn((x*y/z +a)<b;x*y/z+0,1);x*y/z)

Gruß Fiolax
Willi Wipp
Moderator


Verfasst am:
02. März 2004, 20:00
Rufname:
Wohnort: Raum Wiesbaden


Re: Wenn -Dann -Funktionen - Re: Wenn -Dann -Funktionen

Nach oben
       

Hi Fiolax,

versuchs mal mit
Code:
=Wenn(([x]*[y]/[z]+[a])>[b];[x]*[y]/[z]-0,1;Wenn(([x]*[y]/[z]+[a])<[b];[x]*[y]/[z]+0,1;[x]*[y]/[z]))

Auf Felder bezieht man sich in Access, in dem mann/frau den Namen des Feldes zwischen [] setzt.
Deine Felder im Formular sollten bei der Eigenschaft Format einen Eintrag vom Typ Zahl (z.B. Standardzahl) haben.
Sonst werden Sie als Text interpretiert. => Dann mit Wert([x]) zugreifen.
Du solltest auch allen Feldern einen Standardwert zuweisen, sonnst koennen sie auch noch den Wert Null (nicht 0) annehmen.
=> Dann mit Nz([a]; 0) zugreifen.
Und Du solltest natuerlich verhindern, dass das Feld z den Wert 0 hat.

Ich persoenlich wuerde sowas in VBA als Public Function loesen
=> mann/frau kann es dann an vielen verschiedenen Stellen verwenden, z.B. im Formular, in einer Abfrage, etc.
Code:
Public Function DeineBerechnung(dX As Double, dY As Double, dZ As Double, _
                                dA As Double, dB As Double) As Double
    dX = Nz(dX, 0)
    dY = Nz(dY, 0)
    dZ = Nz(dZ, 0)
    dA = Nz(dA, 0)
    dB = Nz(dB, 0)
    If dZ = 0 Then
'        MsgBox "Division durch 0", vbCritical, "Fehler"
        DeineBerechnung# = 0
    End If
    If dX * dY / dZ + dA > dB Then
        DeineBerechnung# = dX * dY / dZ - 0.1
      ElseIf dX * dY / dZ + dA > dB Then
        DeineBerechnung# = dX * dY / dZ + 0.1
      Else
        DeineBerechnung# = dX * dY / dZ
    End If
End Function
Verwendet wird die Funktion dann so
Code:
=DeineBerechnung([x];[y];[z];[a];[b])

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
Fiolax
Im Profil kannst Du frei den Rang ändern


Verfasst am:
03. März 2004, 01:01
Rufname:
Wohnort: Südhessen

AW: Wenn -Dann -Funktionen - AW: Wenn -Dann -Funktionen

Nach oben
       

Fiolax am 02. März 2004 um 23:22 hat folgendes geschrieben:
Danke erstaml für die schenlle Hilfe!
Die Formel habe ich wie beschrieben zwar schon mal versucht einzugeben, allerdings ist es Möglich, das die Felder nicht auf Zahl Formatiert sind. Ich werde es morgen gleich mal testen.
Da ich erst seit circa einer Woche mit Access arbeite und es mir komplett selbst beibringen muß, kann ich mit dem zweiten Lösungsvorschlag VBA als Publik Funktion (noch) nichts anfangen. Ich versuche vielmehr solche Dinge aus Excel zu übernehmen!

Ich werde mich im laufe der Woche melden ob es geklappt hat,

Gruß Fiolax
Nachtrag:
Mir hat das alles keine Ruhe gelassen und ich habe es eben noch versucht. dabei ist mir aufgefallen, das ich im Excel noch angebe, das das Ergebnis auf eine Nachkommastelle gerundet werden soll und wenn es nach dem Runden nicht hinkommt, soll er auf bzw abrunden.
Beispiel:

12,45 gerundet auf 12,5
13,45 gerundet auf 13,5
Beide Werte addiert ergibt 26,0 der Sollwert liegt jetzt aber bei 25,9. Deshalb soll der Wert 12,45 auf 12,4 gerundet werden.
Wie schon gesagt, im Excel kein Problem. Die oben angegebene Formel hat leider nicht so funktioniert. Ich nehme an da Access zwar nur eine Kommastelle anzeigt, aber im Hintergrund alle Nachkommastellen angegeben sind, hat er damit ein Problem. Im Excel kann ich den Befehl geben erst auf eine Nachkommastelle runden und dann mit dem 2. Wert (der auch mit einer Nachkommastelle angegeben ist) addieren und Vergleichen ob der Sollwert erreicht wird.
Ich hoffe ich konnte mein Problem etwas klarer darstellen.

Gruß Joogel
Willi Wipp
Moderator


Verfasst am:
03. März 2004, 18:01
Rufname:
Wohnort: Raum Wiesbaden

Re: Wenn -Dann -Funktionen (II) - Re: Wenn -Dann -Funktionen (II)

Nach oben
       

Hi Fiolax,

das mit dem VBA ist gar nicht so kompliziert wie es erstmal aussieht.
Du erstellst einfach ein neues Modul, kopierst den Code rein und speicherst es unter z.B. Modul1
(nicht den Functionsnamen fuer das Modul verwenden!)
Danach kannst Du die Funktion 'ueberall' verwenden.
In der Funktion kann man dann auch z.B. die Fix-, Int- oder Round-Funktion verwenden.

Man kann das zwar fast alles auch in den Steuerelementinhalt packen, aber das ist halt sehr unuebersichtlich!
(Ich weis auch gar nicht wo die Grenze fuer die Laenge liegt, aber es gibt bestimmt eine)

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)
Fiolax
Im Profil kannst Du frei den Rang ändern


Verfasst am:
04. März 2004, 18:29
Rufname:
Wohnort: Südhessen


Re: WEnn-Dann Funktionen - Re: WEnn-Dann Funktionen

Nach oben
       

Hallo, ich habe die Tipps von ihnen Probiert, bin aber leider nicht weitergekommen. Ich habe aber eine Excel-Datei und ein Test-Formular welches ich mailen könnte. Vielleicht würde dies weiterhelfen!?!

Gruß Fiolax
Willi Wipp
Moderator


Verfasst am:
09. März 2004, 19:20
Rufname:
Wohnort: Raum Wiesbaden

Re: Wenn -Dann -Funktionen (III) - Re: Wenn -Dann -Funktionen (III)

Nach oben
       

Hi Fiolax,

kopiere bitte den folgenden Code in ein neues Modul z.B. modExcelFunction
Code:
Option Compare Database
Option Explicit

Public Function FndAbrunden(vZahl As Variant, iStellen As Integer) As Double
    Dim dFaktor As Double
    Dim dZahl   As Double
   
    dFaktor# = 10 ^ iStellen
    dZahl# = Nz(vZahl, 0)
    FndAbrunden# = Fix((dZahl# * dFaktor#)) / dFaktor#
End Function

Public Function FndAufrunden(vZahl As Variant, iStellen As Integer) As Double
    Dim dFaktor As Double
    Dim dZahl   As Double
    Dim dZahl1  As Double
   
    dFaktor# = 10 ^ iStellen
    dZahl# = Nz(vZahl, 0)
    dZahl1# = FndAbrunden#(vZahl, iStellen)
    If dZahl1# <> dZahl# Then
        FndAufrunden# = Fix((dZahl# * dFaktor#) + 1) / dFaktor#
      Else
        FndAufrunden# = dZahl1#
    End If
End Function

Public Function FndRunden(vZahl As Variant, iStellen As Integer) As Double
    Dim dFaktor As Double
    Dim dZahl   As Double
   
    dFaktor# = 10 ^ iStellen
    dZahl# = Nz(vZahl, 0)
    FndRunden# = Int((dZahl# * dFaktor#) + 0.5) / dFaktor#
End Function

Public Function FndCalc(vA As Variant, vB As Variant, vC As Variant, _
                        vD As Variant, vE As Variant) As Double
    Dim dA      As Double
    Dim dAuf    As Double
    Dim dAb     As Double
    Dim dB      As Double
    Dim dC      As Double
    Dim dD      As Double
    Dim dE      As Double
   
    dA# = Nz(vA, 0)
    dB# = Nz(vB, 0)
    dC# = Nz(vC, 0)
    dD# = Nz(vD, 0)
    dE# = Nz(vE, 0)
    dAuf# = FndAufrunden((dA# * dB# / dC#), 1)
    dAb# = FndAbrunden((dA# * dB# / dC#), 1)
    If FndRunden#(dAuf# + dD#, 1) > dE# Then
        FndCalc# = dAb#
      ElseIf FndRunden#(dAb# + dD#, 1) < dE# Then
        FndCalc# = dAuf#
      Else
        FndCalc# = dA# * dB# / dC#
    End If
End Function
dieser Code stellt die Funktionen ABRUNDEN, AUFRUNDEN und RUNDEN aus Excel nach.
Zusaetzlich stellt er Deine Funktion aus Excel nach.
Du kannst jetzt also einfach
Code:
=FndRunden([Text17]*[Text0]/[Text4];1)
'bzw.
=FndCalc([Text26];[Text0];[Text4];[Text28];[Text29])
in die entsprechenden Text-Felder schreiben.
_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)


Zuletzt bearbeitet von Willi Wipp am 07. Apr 2007, 15:45, insgesamt einmal bearbeitet
Fiolax
Im Profil kannst Du frei den Rang ändern


Verfasst am:
09. März 2004, 22:17
Rufname:
Wohnort: Südhessen

Re: Wenn -Dann -Funktionen (III) - Re: Wenn -Dann -Funktionen (III)

Nach oben
       

Hallo Willi,
vielen Dank für die schnelle Hilfe, die Eingabe funktioniert fast einwandfrei. Es wird am Anfang zwar gemeckert, das es sich um eine Division durch null handelt bzw Überlauf! Ist aber nach den ersten beiden Eingaben weg! Die Rechnungen sind alle Richtig. Gibt es eine Möglichkeit diese Fehlermeldungen auszublenden, da sie ja nach den Eingaben keine Rolle mehr spielen?

Vielen Dank nochmal, das hätte ich nie geschaft.

Gruß Jens
Willi Wipp
Moderator


Verfasst am:
10. März 2004, 00:02
Rufname:
Wohnort: Raum Wiesbaden

Re: Wenn -Dann -Funktionen (IV) - Re: Wenn -Dann -Funktionen (IV)

Nach oben
       

Hi Fiolax,

Embarassed das habe ich total vergessen.
Ersetze einfach die Funktion FndCalc durch folgenden
Code:
Public Function FndCalc(vA As Variant, vB As Variant, vC As Variant, _
                        vD As Variant, vE As Variant) As Double
    Dim dA      As Double
    Dim dAuf    As Double
    Dim dAb     As Double
    Dim dB      As Double
    Dim dC      As Double
    Dim dD      As Double
    Dim dE      As Double
   
    dA# = Nz(vA, 0)
    dB# = Nz(vB, 0)
    dC# = Nz(vC, 0)
    If dC# = 0 Then
        FndCalc# = -1    'Kann man natürlich auch einen anderen Wert einsetzen
        Exit Function
    End If
    dD# = Nz(vD, 0)
    dE# = Nz(vE, 0)
    dAuf# = FndAufrunden((dA# * dB# / dC#), 1)
    dAb# = FndAbrunden((dA# * dB# / dC#), 1)
    If FndRunden#(dAuf# + dD#, 1) > dE# Then
        FndCalc# = dAb#
      ElseIf FndRunden#(dAb# + dD#, 1) < dE# Then
        FndCalc# = dAuf#
      Else
        FndCalc# = dA# * dB# / dC#
    End If
End Function

_________________
Eine kurze Rueckmeldung waere nett
SL Willi Wipp

(Anleitung fuer das Anhaengen von Dateien: Klicke links auf [www], Gaeste muessen sich dafuer anmelden)


Zuletzt bearbeitet von Willi Wipp am 07. Apr 2007, 15:44, insgesamt einmal bearbeitet
Fiolax
Im Profil kannst Du frei den Rang ändern


Verfasst am:
10. März 2004, 00:29
Rufname:
Wohnort: Südhessen


Re: Wenn -Dann -Funktionen (V) - Re: Wenn -Dann -Funktionen (V)

Nach oben
       

Ich komme aus dem staunen nicht mehr raus, es funktioniert alles perfekt. Ich habe jetzt versucht dieses Modul zu verstehen, aber das wird noch dauern. Vielen Dank für die Mühen die ich gemacht habe.

Man wird sicherlich wieder voneinander hören

Vielen Dank
Fiolax
Neues Thema eröffnen   Neue Antwort erstellen Alle Zeiten sind
GMT + 1 Stunde

Diese Seite Freunden empfehlen

Seite 1 von 1
Gehe zu:  
Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen

Verwandte Themen
Forum / Themen   Antworten   Autor   Aufrufe   Letzter Beitrag 
Keine neuen Beiträge Access Programmierung / VBA: VBA Funktionen aufruff... Performenc steigerung 10 Illuminati 487 22. März 2012, 15:22
Illuminati VBA Funktionen aufruff... Performenc steigerung
Keine neuen Beiträge Access Programmierung / VBA: Funktionen nacheinander abarbeiten lassen 12 gombigerd 492 20. Jun 2011, 18:17
gombigerd Funktionen nacheinander abarbeiten lassen
Keine neuen Beiträge Access Programmierung / VBA: zentrale Datei mit Funktionen/Makros für alle Datenbanken 10 mhw 388 23. Jan 2011, 23:57
mhw zentrale Datei mit Funktionen/Makros für alle Datenbanken
Keine neuen Beiträge Access Programmierung / VBA: Funktionen 3 Rofl-Pellkartoffel 195 01. März 2010, 17:04
Vandroy Funktionen
Keine neuen Beiträge Access Tabellen & Abfragen: undefinierte Funktionen "Round" in Ausdruck 5 jendris 1204 01. Okt 2009, 14:48
Gast undefinierte Funktionen "Round" in Ausdruck
Keine neuen Beiträge Access Programmierung / VBA: Unverträglichkeit zwischen zwei API Funktionen? 3 ether28 385 30. Sep 2009, 00:43
ether28 Unverträglichkeit zwischen zwei API Funktionen?
Keine neuen Beiträge Access Programmierung / VBA: SQL UPDATE und Funktionen 5 Kleibi 506 28. Apr 2009, 10:35
Kleibi SQL UPDATE und Funktionen
Keine neuen Beiträge Access Formulare: Brauche Hilfe bei Funktionen für meine Datenbank 12 Der_Computerfreak 589 24. Sep 2007, 19:09
Gast Brauche Hilfe bei Funktionen für meine Datenbank
Keine neuen Beiträge Access Programmierung / VBA: VBA Code alphabetisch nach Subs und Funktionen sortieren???? 2 Lothar_OMC 691 18. Sep 2007, 09:57
Lothar_OMC VBA Code alphabetisch nach Subs und Funktionen sortieren????
Keine neuen Beiträge Access Programmierung / VBA: Auf Funktionen anderer Formulare zugreifen 4 MenschMarc 501 23. Aug 2007, 22:23
jmc Auf Funktionen anderer Formulare zugreifen
Keine neuen Beiträge Access Programmierung / VBA: Button mit zwei Funktionen belegen 2 kollege 694 15. März 2007, 15:03
kollege Button mit zwei Funktionen belegen
Keine neuen Beiträge Access Programmierung / VBA: Zwanzig Funktionen in einer zusammen fassen 3 Türmer 493 24. Jan 2007, 17:13
Inti31 Zwanzig Funktionen in einer zusammen fassen
 

----> Diese Seite Freunden empfehlen <------ Impressum - Besuchen Sie auch: Microsoft-Excel Diagramme