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

Problem mit Funktion

Problem mit Funktion
19.07.2021 21:15:40
Burghard
Hallo,
ich habe eine Funktion, die Werte ohne Strich summiert:

Public Function ohne_strich(Bereich As Range)
Dim rngC As Range, dblZ As Double
Application.Volatile
For Each rngC In Bereich
If rngC.Font.Strikethrough = False Then
dblZ = dblZ + rngC
End If
Next
ohne_strich = dblZ
ActiveSheet.Calculate
End Function
In der Zelle, die die Summe abbildet, steht: =ohne_strich($H$10:$H$350) .
Ich möchte gerne die Funktion erweitern, nämlich, dass in der Summe nur Werte, die nicht durchgestrichen und größer als 0 sind, addiert werden, in etwa so: =ohne_strich($H$10:$H$350) >0 (geht so nicht).
oder
...
dblZ = dblZ + rngC >0 (geht so auch nicht)
...
Hilfe wäre nett.
Grüße
Burghard

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Problem mit Funktion
19.07.2021 21:25:09
GerdL
Moin Burghard!

Public Function ohne_strich_und_positiv(Bereich As Range)
Dim rngC As Range, dblZ As Double
Application.Volatile
For Each rngC In Bereich
If rngC.Font.Strikethrough = False And rngC > 0 Then
dblZ = dblZ + rngC
End If
Next
ohne_strich_und_positiv = dblZ
ActiveSheet.Calculate
End Function
Gruß Gerd
AW: Problem mit Funktion
19.07.2021 22:16:44
Burghard
Hallo Gerd,
vielen Dank für die Lösung! Funktioniert wie gewünscht. :-)
Grüße
Burghard
Ich finde, solche Spezialsummen gibt's ...
20.07.2021 02:33:55
Luc:-?
…schon genug, Burghard & Gerd,
und mM haben sie nur eine ExistenzBerechtigung, wenn sie tatsächlich anders vorgehen als Bestehendes und ggf auch schneller sind. Ansonsten bevorzuge ich Ergänzungen zu bestehenden Xl-Fktt, hier also SUMME bzw SUMMENPRODUKT, die eine DatenAuswahl vornehmen, die mit bestehenden Xl-Fktt nicht möglich ist. Hier also nur das Durchstreichen als Nicht-AuswahlKriterium. Entsprechend habe ich die ursprüngl UDF geändert und umbenannt:

Function NoStrikes(Bereich As Range, Optional ByVal Ersatzwert, _
Optional ByVal stetsNeu As Boolean = True)
Dim cc As LongPtr, cx As LongPtr, rc As LongPtr, rx As LongPtr, _
rngC As Range
Application.Volatile stetsNeu
Set Bereich = Intersect(Bereich, ActiveSheet.UsedRange)
cc = Bereich.Columns.Count: rc = Bereich.Rows.Count
ReDim avRelData(rc - 1, cc - 1)
For Each rngC In Bereich
If Not rngC.Font.Strikethrough Then
avRelData(rx, cx) = rngC
ElseIf Not IsMissing(Ersatzwert) Then
avRelData(rx, cx) = Ersatzwert
End If
cx = (cx + 1) Mod cc: rx = rx - CInt(cx = 0)
Next rngC
NoStrikes = avRelData
End Function
Hier hat man nun auch die optionale Möglichkeit, für die ausfallenden Werte einen anderen Wert anzugeben (2.Argument). Das fktioniert natürlich auch für Texte. Außerdem kann man per 3.Argument wählen, ob die UDF volatil sein soll. Standardmäßig ist sie so eingestellt, weshalb die Volatilität nur abgewählt wdn kann (mit 0 bzw FALSCH). Die UDF legt ein VariantArray für den ganzen Bereich lt 1.Argument (ggf optimiert) an und gibt diesen aus, so dass andere Fktt damit weiterarbeiten können und bspw den PositivAbgleich vor SummenBildung durchführen können. Dazu zeige ich im Folgenden 2 FmlVarianten, die beide nahezu gleichlang sind und 4 Fktsaufrufe beinhalten, wobei die 2. den Vorteil hat, die UDF nur 1× aufrufen zu müssen. Dabei handelt es sich wg WENN- bzw WENNFEHLER-Verwendung um singulare MatrixFmln. Allerdings steht WENNFEHLER erst ab Xl12/2007 zV:
{=SUMME(WENN(NoStrikes(A:A)>0;NoStrikes(A:A)))}
{=SUMME(WENNFEHLER(WURZEL(NoStrikes(A:A))^2;""))}
Morhn, Luc :-?
Anzeige
AW: Ich finde, solche Spezialsummen gibt's ...
20.07.2021 09:11:25
Burghard
Hallo Luc,
vielen Dank, dass Du Dich des Problems angenommen und Dir solche Mühe gegeben hast. Wenn ich ganz ehrlich bin, dann ist Deine Lösung im Code für mich schwierig nachzuvollziehen, da fehlen mir doch sehr viele Voraussetzungen. Deine Programmierung ist von einem anderen Stern und das meine ich nur positiv. Einfach toll. Danke für Deinen Beitrag, er wird auch anderen helfen. :-)
Viele Grüße
Burghard
So war's auch gemeint (2.FmlVar). ;-) owT
20.07.2021 14:00:05
Luc:-?
:-?
AW: Problem mit Funktion
19.07.2021 21:38:25
Daniel
Hi
If then kannst du doch.
Warum also nicht ein weiteres If rngC > 0 then hinzufügen?
Oder du erweitert die Rechnung, da ein True wie -1 und ein False wie 0 verrechnet wird:

dblZ = dblZ - rngC * (rngC > 0)
Gruß Daniel
Anzeige
AW: Problem mit Funktion
19.07.2021 22:20:12
Burghard
Hallo Daniel,
vielen Dank für Deinen Hinweis (da hätte ich wirklich auch selbst drauf kommen müssen) und die Lösung (die ist wirklich elegant, Respekt!)! Funktioniert wie gewünscht. :-)
Grüße
Burghard

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige