Public Function SummePlus(Zahl1, Optional Zahl2) As String Dim aTemp Dim x As Variant, y As Variant Dim i As Long, j As Long
If IsArray(Zahl1) Then
aTemp = Zahl1
For i = 1 To UBound(aTemp, 1)
For j = 1 To UBound(aTemp, 2)
If IsNumeric(aTemp(i, j)) Then
x = x + CDec(aTemp(i, j))
End If
Next j
Next i
Else
x = CDec(Zahl1)
End If
If Not IsMissing(Zahl2) Then
If IsArray(Zahl2) Then
aTemp = Zahl2
For i = 1 To UBound(aTemp, 1)
For j = 1 To UBound(aTemp, 2)
If IsNumeric(aTemp(i, j)) Then
y = y + CDec(aTemp(i, j))
End If
Next j
Next i
Else
y = CDec(Zahl2)
End If
x = x + y
End If
SummePlus = x
End Function
Probleme:
•Excel meint, dass in der ersten Zeile ein Fehler ist,
•Ich bräuchte dass mit multiplikation
Excel meint das vollkommen zu Recht, denn bei so einer mieserablen Formatierung würde ich auch streiken. Schreib das Ganze so:
Public Function SummePlus(Zahl1, Optional Zahl2) As String
Dim aTemp
Dim x As Variant, y As Variant
Dim i As Long, j As Long
If IsArray(Zahl1) Then
aTemp = Zahl1
For i = 1 To UBound(aTemp, 1)
For j = 1 To UBound(aTemp, 2)
If IsNumeric(aTemp(i, j)) Then x = x + CDec(aTemp(i, j))
Next j
Next i
Else
x = CDec(Zahl1)
End If
If Not IsMissing(Zahl2) Then
If IsArray(Zahl2) Then
aTemp = Zahl2
For i = 1 To UBound(aTemp, 1)
For j = 1 To UBound(aTemp, 2)
If IsNumeric(aTemp(i, j)) Then
y = y + CDec(aTemp(i, j))
End If
Next j
Next i
Else
y = CDec(Zahl2)
End If
x = x + y
End If
SummePlus = x
End Function
und schon hört Excel auf mit ‚meinen‘…
Ich hab jetzt die Funktion nicht auf Richtigkeit überprüft, nur sichergestellt, dass die Fehleranzeige durch Excel unterbleibt.
Wenn Du das noch für die Multiplikation brauchst, benenne die Funktion entsprechend um (und ersetze die letzte Zeile
„SummePlus = x“ durch „NeuerFunktionsname = x“ und überall wo x = steht ersetze das Additionszeichen durch ein Multiplikationszeichen.
Hallo
Ja, das sehe ich auch schon so. Diesen Rattenschwanz musst Du mal trennen.
Von:
Public Function SummePlus(Zahl1, Optional Zahl2) As String Dim aTemp Dim x As Variant, y As Variant Dim i As Long, j As Long
Nach:
Public Function SummePlus(Zahl1, Optional Zahl2) As String
Dim aTemp
Dim x As Variant, y As Variant
Dim i As Long, j As Long
Weiter hast Du im Deklarationsbereich das Problem:
Ändere von:
Public Function SummePlus(Zahl1, Optional Zahl2) As String
Nach:
Public Function SummePlus(Zahl1 as double, Optional Zahl2 as double) As String
So damit kannst Du zwei Werte der Funktion übergeben, die dann einen Text zurück gibt. Am ende Der Funktion gibst Da aber X as Variant und nucht as String zurück.
Irgendwie machst Du da ja eine Addition mit zwei Variant. meine frage, warum nicht mit zwei Decimal oder Double? Denn x und y erhalten jeweils ein Dezimalwert mit CDec. kannst Sie ja als Dec deklariren, dann geht die Rechnung möglicherweise nicht Flöte. Für genaue berechnungen nimmst Du eh am besten die Double Variable.
Zum Thema Zahl1. ist diese jetzt einen Array oder keinen?
Public Function SummePlus(Zahl1, Optional Zahl2) As String
Dim aTemp
Dim x As Variant, y As Variant
Dim i As Long, j As Long
If IsArray(Zahl1) Then
aTemp = Zahl1
For i = 1 To UBound(aTemp, 1)
For j = 1 To UBound(aTemp, 2)
If IsNumeric(aTemp(i, j)) Then
x = x + CDec(aTemp(i, j))
End If
Next j
Next i
Else
x = CDec(Zahl1)
End If
If Not IsMissing(Zahl2) Then
If IsArray(Zahl2) Then
aTemp = Zahl2
For i = 1 To UBound(aTemp, 1)
For j = 1 To UBound(aTemp, 2)
If IsNumeric(aTemp(i, j)) Then
y = y + CDec(aTemp(i, j))
End If
Next j
Next i
Else
y = CDec(Zahl2)
End If
x = x + y
End If
SummePlus = x
End Function
1.)
Die ersten Zeilen wie folgt abändern
Public Function SummePlus(Zahl1, Optional Zahl2) As String
Dim aTemp
Dim x As Variant, y As Variant
Dim i As Long, j As Long
2.)
-Funktionsname ändern in z.B ProduktMal
-Nach der Dimensionierung von x und y diesen den Wert 1 zuordnen
X=1
y=1
-Die Zeilen
x = x + CDec(aTemp(i, j))
y = y + CDec(aTemp(i, j))
x = x + y
SummePlus = x
umändern in
x = x * CDec(aTemp(i, j))
y = y * CDec(aTemp(i, j))
x = x * y
ProduktMal = x
Wie lautet nun die genaue Aufgabenstellung/Frage?
Welche 15 Stellen meinst Du? Vor oder nach dem Komma.
Die Verwendung des Datentyps Double sollte eigentlich für (fast) alles ausreichen:
Double # 8 Bytes -1,79769313486232E308 bis -4,94065645841247E-324 für negative Werte
4,94065645841247E-324 bis 1,79769313486232E308 für positive Werte
(siehe http://www.vbarchiv.net/commands/cmd_datentypen.html)
Kannst Du eine Beispiel-Aufgabe inkl. gewünschtes Ergebnis liefern?
Dann kann man das zumindest mal testen.
Die 1. Zeile (copy&paste) liefert keine Zeilenumbrüche, so dass die Funktions-Deklaration nicht korrekt ist. Vielleicht ist das bei Dir ja auch der Fehler.
So muss es aussehen:
Zeile 1:
Public Function SummePlus(Zahl1, Optional Zahl2) As String