Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1504to1508
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA IFerror / IF

VBA IFerror / IF
15.07.2016 11:23:35
Sabrina
Hallo zusammen :)
Aalso. Ich brauche mal eure Hilfe.
Zwischenwert=WENNFEHLER((WENN(Wert_11;1;Wert_1))+K2)/(1+K2);H2)
Ich habe folgenden theoretischen Excel befehl. brauche ihn aber als VBa.
Das weitere Problem Wert_1 ist halt keine Zelle, sondern ein Wert, den ich vorher bereits ausgerechnet habe.
Es handelt sich um eine Funktion. Im ersten Schritt habe ich halt die FUnktion definiert und mit dem Wert 1x gerechnet. Jetzt muss es weiter gehen mit der wennfehler funktion. ich weiß leider nicht, wie ich das umsetze. hab es schon probiert, allerdings funktioniert es nicht :P Glaube auch, da ich nicht weiß, wie ich das ich IFerror und IF in eine Funktion bringe, und es ja dann ergebnis nicht direkt in eine zelle schrieben soll, sondern ich damit weiterrechnen möchte.
Könnt ihr mir helfen :)
Danke :)

13
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA IFerror / IF
15.07.2016 11:49:23
Michael
Hi Sabrina,
könnte man etwa so machen:
Function Wert_1() As Double
Wert_1 = 1
End Function
Sub test()
Dim erg As Double, ausFct As Double, zw As Double
Const z1 = "K2", z2 = "H2"
ausFct = Wert_1 ' so wird die Function nur
' EIN Mal aufgerufen, das spart Zeit
'erst mal die zwei WENN...
If ausFct  1 Then
erg = 0
Else
erg = ausFct
End If
End If
'bis hierher kann es ja keinen Fehler geben
zw = Range(z1) ' also K2
erg = erg + zw ' also K2
If zw = -1 Then  ' hier könnte ein Fehler entstehen
erg = Range(z2) ' also H2
Else
erg = erg / (1 + zw)
End If
MsgBox erg
End Sub
Schöne Grüße,
Michael
Anzeige
AW: VBA IFerror / IF
15.07.2016 12:49:18
Sabrina
Hey Danke schonmal!
Also ich habe ja vorher schon die Funktion definiert, da ich vorher schon mit mehreren Variablen rechne. Kann ich dann einfach während dieser Function ein Sub starten?
Danke!
AW: VBA IFerror / IF
15.07.2016 12:50:33
Sabrina
Hey Danke schonmal!
Also ich habe ja vorher schon die Funktion definiert, da ich vorher schon mit mehreren Variablen rechne. Kann ich dann einfach während dieser Function ein Sub starten?
Und ich möchte dann ja noch wieter mit den Werten rechnen und es soll nicht in einer Zelle direktausgegeben werden, kann ich das sub dann einfach verlassen und bin iweder in der funktion drin?
Danke!
Anzeige
AW: VBA IFerror / IF
15.07.2016 13:15:58
Sabrina
Ich kann vllt mal das ganze zeigen:
Public Function Test(dbl_F1 As double) As Double
NRFV_F1 = (dbl_F1 + 38.03) / (81.26 + 38.03)'berechne Value
End Function

Sub test()
Dim TRSV_F1 As Double, ausFct As Double, zw As Double
Dim epsilon As Double, AvVal As Double
epsilon = 0.00001
AvVal = 0.385257319
ausFct = NRFV_F1 'so wird die Function nur EINMal aufgerufen, das spart Zeit
'erst mal die zwei WENN...
If ausFct TRSV_F1 = 0
Else
If ausFct > 1 Then
TRSV_F1 = 1
Else
TRSV_F1 = ausFct
End If
End If
'bis hierher kann es ja keinen Fehler geben
TRSV_F1 = TRSV_F1 + epsilon ' also K2
If zw = -1 Then ' hier könnte ein Fehler entstehen
TRSV_F1 = AvVal ' also H2
Else
TRSV_F1 = TRSV_F1 / (1 + epsilon)
End If
MsgBox TRSV_F1
End Sub
End Sub
End Function
ich hab jetzt mal K2 und H2 direkt durch werte ersetzt, vllt wirds dann leichter für mich. da epsilon immer gleich ist und das andere immer so ein durchschnittswert, den kann ich aber auch vorher definieren.
es sieht mir so allerdings nicht richitg aus. und ich wieß auch nicht, wie ich so auf das ergebnis kommen soll und wie die function das sub () mit einbezieht und wie ich dann damit weiter rechnen kann..
Aber vielen DAnk schonmal falls du mir nochmal helfen kannst :)
Anzeige
AW: VBA IFerror / IF
15.07.2016 13:24:52
Michael
Hi Sabrina,
so kommen wir nicht weiter... Du hattest ja bereits die Frage weiter unten gestellt unter:
https://www.herber.de/forum/messages/1504478.html
Es ist völlig unklar, was Du unter "weiterrechnen" verstehst und wo und was Du wann erreichen willst.
Kannst Du nicht mal eine Beispieldatei hochladen, aus der das eindeutig hervorgeht und beschreiben, was Du insgesamt benötigst?
Schöne Grüße,
Michael
AW: VBA IFerror / IF
15.07.2016 14:16:05
Sabrina
https://www.herber.de/bbs/user/107033.xlsx
Hier die Datei. Also hab jetzt mal alles gelöscht was für den Schritt nicht nötig ist.
Das Problem ist, weshlab ich ein VBA brauche, dass ich diese Berechnung auf vielen Blättern nachher machen muss und nicht immer dieses Hilfssheet kopieren kann ,da es zu riesig wird.
Bis Normalized Value bin ich ja gekommen und das von gestern mit dem Vlookup ist auch in der Spalte geklärt. jetzt muss ich halt das mit dem Wennfehler machen, was in Spalte I ist mit Transformed Value. Abschließend wird daraus ja das Summenprodukt gebildet (unter der tabelle) und dann muss ich damit weiter rechnen in der Tabelle, die Unten kommt. das hab ich jetzt aber erstmal weggelassen...
Jedes einzeln irgendwie versteh ich auch wie man das in VBA macht, aber ich hab kb wie ich das alles in eine Funktion bekomme, da ich sonst immer nur ienfach mit Sub gearbeitet hab.
Hilft euch das? Ich hoffe, ich hab es einigermaßen erklärt.
Danke :)
Anzeige
Aha! UDF
15.07.2016 15:02:21
Michael
Hi Sabrina,
jetzt ist klar, daß Du eine UDF benötigst und vor allem, daß der Fehler bereits in Spalte G entstanden sein KANN - ohne Datei war das nicht zu erahnen.
Die Function kommt in ein ALLGEMEINES Modul, das Du in VBA mit Einfügen-Modul erzeugst:
Option Explicit
Function TFV(zG2 As Range, zH2 As Range, zK2 As Range)
' TFV steht für TransFormedValue, damit Du es Dir merken kannst
Dim erg#    '# = as double
'=TFV(G2;H2;K2)
If IsError(zG2) Or zK2 = -1 Then
erg = zH2
Else
If zG2  1 Then
erg = 1
Else
erg = zG2
End If
End If
erg = erg + zK2
erg = erg / (1 + zK2)
End If
TFV = erg
End Function

Aufgerufen wird das Ding in I2 mit: =TFV(G2;H2;K2)
Es erzeugt exakt die gleichen Werte wie die bisherige Formel.
Deine Datei hat eine Fehlermeldung erzeugt von wegen "unlesbarer Inhalt", deshalb lade ich sie nicht wieder hoch.
Schöne Grüße,
Michael
Anzeige
AW: Aha! UDF
15.07.2016 15:39:45
Sabrina
Hey super vielen Dank dir! Probiere es sofort aus.
Aber ist das dann eine neue Funktion unter der ersten Funktion die ich hatte?
hab ja am anfang eine Public function gemacht, damit für die erste berechnung.
Die Zwischenwerte sollen nirgendwo auf einem Tabellenblatt stehen. Ich will nur später (wenn ich die nächsten Schritte gemacht habe) das Endergebnis. Das Tabellenblatt, was ich geschickt habe, wurde vorher für 1 Auswertung genutzt. Da ich jetzt in 1 Excel sehr viele Auswertungen mache, brauche ich jetzt dieses VBA so, dass keine Zwischenergebnisse irgendwo notiert werden. Das Tabellenblatt was ich geschickt habe, wird es also so nicht mehr geben.
Weißt du, was ich meine?
Anzeige
AW: Aha! UDF
15.07.2016 16:41:32
Sabrina
Ich hab mir grad was anderes überlegt. Ich könnte allgemeine Formeln aufstellen und sie später erst füttern.
Ich könnte so beginnen:
Public Function Trafo(x As Double, a As Double, b As Double)
Trafo = ((x - a) / (b - a))
End Function
Als nächstes würde ich deine Formel allgemein aufschrieben indem ich sie so aufstelle:
Public Function ErrorF( ?, AvgVal as double, epsilon as double)
das was ich nicht weiß ist, wie ich an stelle der ? die Funktion abgebe.
Wenn ich schriebe ErrofF(Trafo as Double,...) dann denkt das VBA ja sicherlich, es ist eine  _
allgemeine Variable aber ich kann auch nicht schrieben Trafo as Function, das ist ei nFehler.
Wie übergebe ich also in diese 2 Funktion, die erste Funktion?
Ich denke, alles allgemein zu Formulieren und am ende die Funktion jeweils zu füttern, ist  _
einfacher und nicht so komplex. Und diese Frage ist sicher leichter zu beantworten als das verwirrende von vorher.
Vielen Dank :) Schönen Feierabend schonmal!

Anzeige
AW: Aha! UDF
15.07.2016 16:59:39
Michael
Hi,
also, ich begreife immer noch nicht, was Du willst.
Wenn Du sagst, Du löschst das Blatt dann und willst ein Ergebnis wo ganz woanders haben, dann lade doch eine Datei hoch, die GENAUSO aussieht wie das, was Du brauchst, und nicht irgendwas anderes.
Schöne Grüße,
Michael
Also nochmal
15.07.2016 17:13:43
Michael
Hi Sabrina,
entschuldige, aber langsam machst Du mich hier irre...
Also, paß auf, Du läßt im Kopf einfach das "as range" weg, dann ist es automatisch ein Variant, das kann sowohl in einem Blatt als auch von anderen Routinen aufgerufen werden:
Function BinEinZwischenergebnis() As Double
BinEinZwischenergebnis = 5
End Function
Sub TFV_Aufrufen1()
Dim wertZumWeiterrechnen, b#
b=2
wertZumWeiterrechnen = TFV(1, b, 3) ' mit direkt reingeschriebenen WERTEN, VARIABLEN ...
MsgBox wertZumWeiterrechnen
End Sub
Sub TFV_Aufrufen2()
Dim wertZumWeiterrechnen
wertZumWeiterrechnen = TFV(BinEinZwischenergebnis, 2, 3) ' ODER Funktionsaufrufen
MsgBox wertZumWeiterrechnen
End Sub
Function TFV(zG2, zH2, zK2)
' TFV steht für TransFormedValue, damit Du es Dir merken kannst
Dim erg#    '# = as double
'=TFV(G2;H2;K2)
If IsError(zG2) Or zK2 = -1 Then
erg = zH2
Else
If zG2  1 Then
erg = 1
Else
erg = zG2
End If
End If
erg = erg + zK2
erg = erg / (1 + zK2)
End If
TFV = erg
End Function
Schöne Grüße,
Michael
Anzeige
Wie machst du das, ...
15.07.2016 19:33:58
Luc:-?
…Sabrina,
wenn du einer XlFkt in einer ZellFml einen Ausdruck aus einer argumentierten XlFkt als Argument übergeben willst? Das ist hier auch nicht anders! Allerdings muss die Variable, der du letztlich das Ergebnis dieser Fkt übergibst, auch so im Kopf deklariert sein, dass das Ergebnis der als Argument/Parameter verwendeten Fkt damit harmoniert. Das kann man aber nur in ZellFmln so machen! Hier musst du statt der ? schon eine Variable (Name!) festlegen und die dann im Verlauf mit dem Ergebnis der intern aufge­rufe­nen Fkt füllen:
Function ErrorF(Bezug, AvgVal As Double, epsilon As Double)
Dim x, a, b, …
xW = …: aW = …: bW = …
Bezug = Trafo(xW, aW, bW)
…
End Function
Function Trafo(x As Double, a As Double, b As Double)
Trafo = ((x - a) / (b - a))
End Function
Im XlBlatt schreibst du Fmln in Zellen und Xl berechnet die. Sind sie geschachtelt, dann von innen nach außen. Würdest du das Obere als Fml schreiben, sähe das so aus:
=ErrorF(Trafo(xBezug1;aBezug2;bBezug3);AvgBezug;EpsBezug)
Das setzte aber voraus, dass beide Fktt unabhängig voneinander sind und nicht (wie oben gezeigt) die 2. in die 1. integriert ist! Wenn aber das Ergebnis beider (unabhängiger) Fktt in einer SubProzedur einer Variablen zugewiesen wdn soll, kann man das genauso machen wie in der Fml:
erg = ErrorF(Trafo(xW, aW, bW), AvgBezug, epsBezug)
Zuerst wird das Ergebnis von Trafo berechnet und das dann hier ErrorF als 1.Argument übergeben.
Feedback nicht unerwünscht! Gruß, Luc :-?
Besser informiert mit …
Anzeige
Im Prinzip ja! Gruß owT
15.07.2016 13:19:30
Luc:-?
:-?

311 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige