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

Variable Functionen und codeverbesserung

Variable Functionen und codeverbesserung
Dirk
Hallo zusammen,
Ich experimentiere mom programierung von Funktionen herrum.
mich würde interessieren, wie das funktioniert, das ich es hin bekomme die funktion über mehrere bereiche zu erstelen.
nehmen wir als beispiel die min Funktion.
die von Excel erlaub es mehrere Zellen/Zellbereiche anzugeben (=MIN(A1:A8;B4;C5:C7))
wie müsste ich eine Function schreiben, damit sie dieses unterstützt?
bei der funktion min ist mir auch aufgefallen, das ich keinen Vernünftigen Ansatz hinbekomme.
Function minim(ber As Range)
Dim z As Range, kl, tmp As Double
kl = 99999999999# 'um nicht immer 0 zu erhalten muss einmalig kl einen Wert erhalten
For Each z In ber
If z  "" Then
If z 
dies ist nun mein Versuch gewesen, diese Function nachzuschreiben (Für mich zur Übung und besserem Verständniss).
kann mir einer Bitte mal erkären, wie ich es hinbekomme
1. kl nicht erst einen Großen Wert mitzugeben um nicht immer 0 zu erhalten
2. es umgesetzt bekomme mehrere Zellen/zellbereiche zu prüfen.
Diesen Code hatte ich im Netz gefunden gehabt. er funktioniert aber nicht.
Public Function Mini(ByVal Elem, ParamArray Elems())
Dim i As Long
For i = 0 To UBound(Elems)
If Elems(i) 
Dank im Vorraus
Dirk

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Variable Functionen und codeverbesserung
01.03.2012 23:15:11
Gerd
'n Abend Dirk!
Function mini(Ber As Range) As Variant
Dim z As Range
For Each z In Ber
If IsNumeric(z.Text) Then
If IsEmpty(mini) Then
mini = z.Value
ElseIf mini > z.Value Then
mini = z.Value
End If
End If
Next
End Function

Gruß Gerd
Funktion für mehrere Bereiche
02.03.2012 06:47:09
Erich
Hi Dirk,
mit dem letzten Code warst du schon in einer richtigen Richtung unterwegs...
Zu berücksichtigen war hauptsächlich noch, dass Elems nicht Zellen, sondern Bereiche enthält,
die wiederum Zellen enthalten.
Probiers mal damit:
 BCDE
1 WAHR xx
243  
33582
4  39
5 2  

Formeln der Tabelle
ZelleFormel
C1=ISTLEER(D1)
C5=miniA(B2:C3;D1;D3:E4;E1)

Und der Code:

Option Explicit
Function miniA(ParamArray parA())
Dim ii As Long, rngC As Range
For ii = 0 To UBound(parA)
For Each rngC In parA(ii)
If IsNumeric(rngC.Value) Then
If miniA > rngC.Value Or IsEmpty(miniA) Then _
miniA = rngC.Value
End If
Next rngC
Next ii
End Function
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
P.S.: Fehlerbeschreibungen wie "er funktioniert aber nicht" begeistern mich immer wieder!
Anzeige
AW: Funktion für mehrere Bereiche
02.03.2012 07:56:26
Dirk
Vielen Dank euch beiden
Ihr habt mit sehr geholfen
Gruß
Dirk
AW: Funktion für mehrere Bereiche
03.03.2012 16:46:12
Dirk
Hallo nochmal,
ich habe heute endlich zeit gefunden mir die Function mal etwas genauer anzuschauen und muss leider Feststellen, das die irgendwie nicht funktioniert.
sollte in dem Zellbereich irgendwo ein Text stehen z.B. das versteh ich nicht, da doch mit der abfrage
 If IsNumeric(rngC.Value) Then

geprüft wird, ob es scih um eine Zahl handelt.
Gruß
Dirk
AW: Funktion für mehrere Bereiche
03.03.2012 16:59:55
Gerd
Hallo Dirk,
bei welchem Code? Letztendlich ist eine abschließende Antwort, ohne deine Tabelle zu sehen, nicht möglich.
So kann ich nur vermuten, dass du leere Zellen im Bereich u. den zweiten Code genommen hast oder die Zellen keine echte Zahlen sondern Text enthalten.
Gruß Gerd
Anzeige
AW: Funktion für mehrere Bereiche
03.03.2012 17:43:56
Dirk
Grüß dich Gerd,
hier einmal meine Übungsdatei mit verschiedenen Funktionen.
Ich hatte die Min Funktion von Erich genommen. Diese umfaste ja auch die variablen Bereiche.
Function.xls
Du hast recht mit deiner Aussage.
Ich hatte wirklcih leere Zellen mit in dem Bereich.
ich dachte eigendlich die würden ebenfals mit ausgeschlossen werden durch Isnumeric.
Ich habe es zwar jetzt hinbekommen eine Min funktion zu schreiben, es würde mich dennoch interessieren, wieso die leeren Zellen und zum Teil auch größer kleiner Zahlen nicht mit IsNummeric ausgeschlossen werden.
Ich habe festgestellt, das es irgendwie abhängig davon ist, wo die größer kleiner Zahl in dem Bereich steht.
Leider konnte ich das noch nicht genau ausmachen.
Gruß
Dirk
Anzeige
gleichzeitig
03.03.2012 17:58:00
Erich
Hi Dirk,
da haben sich unsere Posts jetzt überschnitten.
Ich denke, ich kann das aufklären. A9 ist in deiner Tabelle leer. IsNumeric(Leer) ist wahr,
deshalb wird die Zelle verarbeitet. Und dann wird miniA auf Empty gesetzt,
der frühere Wert wird vergessen, und in der Tabelle landet eine 0.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
AW: gleichzeitig
03.03.2012 18:08:01
Dirk
Dank an euch erneut
mit isnumeric wird nur text ausgeschlossen.
daher funktioniert auch meine Variante bei leeren Zellen, da ich den Variablentyp des Zellinhaltes Abfrage.
Gruß
Dirk
Bitte genauer
03.03.2012 17:46:56
Erich
Hi Dirk,
welchen der hier dargestellten Codes hast du getestet? IsNumeric() kommt in mini() und miniA() vor.
IsNumeric() bedeutet nicht, dass ein Wert eine Zahl ist. Schau mal die VBA-Hilfe zu IsNumeric() genau an.
Da steht ungefähr: Der Wert kann in eine Zahl umgewandelt werden - muss also nicht schon eine Zahl sein.
Hier ein neues Beispiel mit einer neuen Funktion miniB:
 BCDE
1 WAHR xx
2>0,43 FALSCH
33582
4  <0,27
5 2  
6    
7 0xx

Formeln der Tabelle
ZelleFormel
C1=ISTLEER(D1)
E2=ISTZAHL(E3)
E3="2"
C5=miniB(B2:C3;D1;D3:E4;E1)
C7=miniB(D7:E7)

Die "2" in E3 ist Text, kann aber in die Zahl 2 umgewandelt werden. Das macht dann CDbl
in der Funktion:

Function miniB(ParamArray parA())
Dim ii As Long, rngC As Range
For ii = 0 To UBound(parA)
For Each rngC In parA(ii)
If Not IsEmpty(rngC) And IsNumeric(rngC.Value) Then
If miniB > CDbl(rngC.Value) Or IsEmpty(miniB) Then _
miniB = rngC.Value
End If
Next rngC
Next ii
End Function
Im Beispiel kannst du sehen, dass ein Text wie "<0,2" nicht zur 0 führt.
Wenn bei dir Null rauskommt - steht da überhaupt eine Zahl oder etwas, das in eine Zahl konvertierbar ist?
Das wäre in meinem Beispiel die Situation in C7.
Rückmeldung wäre nett! - Grüße aus Kamp-Lintfort von Erich
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige