Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1428to1432
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

Typen Unverträglichkeit

Typen Unverträglichkeit
06.06.2015 05:45:34
Fabian
Hallo liebes Forum,
bin gerade dabei die Schnittmenge von zwei Verteilungen zu approximieren. Leider wird mir als Fehler eine Typenunverträglichkeit (Variablen i, j) angezeigt. Bei anderen Verteilungen funktioniert es bereits. Nachdem zuerst ein ByRef Fehler kam, habe ich vor die betroffenen Variablen ein ByVal geschrieben. Leider finde ich keinen Fehler. Ich hoffe ihr könnt mir helfen.
Sub main()
Dim s(2) As Double
s(1) = 100
s(2) = 101
MsgBox TriSchnittmenge(80, 20, 69, 80, 101, s)
End Sub
Function TriSchnittmenge(mittelwert As Double, standardabw As Double, min As Double, most As  _
Double, tmax As Double, VorperiodeDaten() As Double) As Double
Dim z As Double
Dim step As Double
Dim max As Double
max = WorksheetFunction.max(VorperiodeDaten)
step = 1
i = min
z = 0
Do Until (i > max)
If WorksheetFunction.Norm_Dist(ByVal i, mittelwert, standardabw, False) >= TriDist(ByVal i,  _
_
min, most, tmax, False) Then
For j = i To max
If WorksheetFunction.Norm_Dist(ByVal j, mittelwert, standardabw, False)  max - step Or 0 = TriDist(ByVal j, min, most, tmax,  _
False) Or 0 = WorksheetFunction.Norm_Dist(ByVal j, mittelwert, standardabw, False) Then
If z = 0 Then
j = j - step
x = TriDist(ByVal j, min, most, tmax, True)
i = j
Exit For
Else
j = j - step
x = x + TriDist(ByVal j, min, most, tmax, True) - TriDist(z, min, most,  _
tmax, True)
i = j
Exit For
End If
End If
Next j
Else
For j = i To max
If WorksheetFunction.Norm_Dist(ByVal j, mittelwert, standardabw, False) >= TriDist(  _
_
ByVal j, min, most, tmax, False) Or j > max - step Or 0 = TriDist(ByVal j, min, most, tmax,  _
False) Or 0 = WorksheetFunction.Norm_Dist(ByVal j, mittelwert, standardabw, False) Then
j = j - step
x = x + WorksheetFunction.Norm_Dist(ByVal j, mittelwert, standardabw, True) -   _
_
WorksheetFunction.Norm_Dist(z, mittelwert, standardabw, True)
i = j
Exit For
End If
Next j
End If
z = i
i = i + step
If i > max Then
Exit Do
End If
Loop
TriSchnittmenge = x
End Function
Function TriDist(x As Double, min As Double, most As Double, max As Double, kum As Boolean) As   _
_
Double
Dim k As Integer
Dim result As Double
If kum = True Then
For k = min To x
If min 

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Sieh dir mal die Deklarationen an, ...
06.06.2015 11:20:58
Luc:-?
…Fabian!
1. ByRef, ByVal gehören zur Deklaration der Argumente einer Fkt, also in deren Kopf, nicht in einen FktsAufruf! Fehlen sie dort, wird automatisch ByRef verwendet! Du hast also mit deiner „Korrektur“ nichts erreicht, da an falscher Stelle vorgenommen.
2. wurden nicht alle Variablen deklariert!
3. ist es ungünstig, das Ergebnis einer Fkt auf einen bestimmten Typ festzulegen. Auf diese Weise kann sie keinen Fehlerwert zurückgeben (in einer ZellFml kann sie in diesem Fall nur #WERT! liefern, hier liefert sie dann wahrscheinl 0!).
4. (nur Tipp!) kann man statt VorperiodeDaten() As Double auch ParamArray VorperiodeDaten() verwenden, was immer (wie hier) zuletzt notiert wdn muss und davor keine optionalen Argumente verträgt, da es selber Optional ist. Ein solches Array ist übrigens stets vom Typ Variant, weil es beliebig viele Elemente (Skalare, Vektoren, Matrizen, n-Tensoren) enthalten kann. UBound(VorperiodeDaten) ergäbe hier dann 0, weil nur 1 Element (als Vektor, sein 1.Element könnte mit VorperiodeDaten(0)(0) identifiziert wdn, was hier ja nicht nötig ist) übergeben wird. Wird nichts übergeben, ergibt UBound übrigens -1.
Tipp: Eine gut pgmierte Fkt (die nur Berechnungen durchführt) kann man als sog UDF auch in einer ZellFml einsetzen. Man muss sie nicht unbedingt aus einer SubProzedur aufrufen. Dabei muss aber beachtet wdn, dass Xl-Bereiche aus mehr als 1er Zelle (auch alle Vektoren) stets 2dimensional sind (VBA-Arrays sind dagg primär immer 1dimensional, wenn man sie nicht als n-dimensional deklariert/dimensioniert, auch die sog Arrays aus Arrays!).
Noch ein forumsspezifischer Hinweis: Gepostete PgmCodes sollte man stets selbst in pre-Tags einschließen, sonst macht das die Forums­Software und die geht dabei sehr formal vor. Dabei sollte man auch die Zeilenlängen beachten und die Zeilen ggf selber mit Leerzeichen_ umbrechen, damit keine Darstel­lungs­fehler auftreten (das steht sogar in den Frage­Formular-Hinweisen!).
Sonst ist mir auf den 1.Blick nichts weiter aufgefallen.
Gruß, Luc :-?

Anzeige
AW: Typen Unverträglichkeit
06.06.2015 14:49:07
Fabian
Vielen Dank Luc:-? :)

Bitte sehr! ;-) owT
06.06.2015 15:08:56
Luc:-?
:-?

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige