Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1600to1604
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

Function Hilfe

Function Hilfe
08.01.2018 13:49:32
Burak
Moin Moin,
also diesmal geht es um Functions. Habe bisher noch gar nicht damit gearbeitet, da es etwas zwar übersichtlicher macht aber meines Wissens nach auch alles ohne geht.
Der Übersichtlichkeit zuliebe habe ich folgendes versucht in eine Function zu packen, bin aber daran gescheitert.
Der Rohcode
    bauteilFehlt = WorksheetFunction.CountIfs(Range("A2:A" & Zeilenzahl), barcode, Range("G2:G"  _
_
& Zeilenzahl), bauteil, Range("H2:H" & Zeilenzahl), "=1")
xray = WorksheetFunction.CountIfs(Range("A2:A" & Zeilenzahl), barcode, Range("G2:G" &  _
Zeilenzahl), bauteil, Range("H2:H" & Zeilenzahl), "=26")
bauteilFalsch = WorksheetFunction.CountIfs(Range("A2:A" & Zeilenzahl), barcode, Range("G2:G" _
_
& Zeilenzahl), bauteil, Range("H2:H" & Zeilenzahl), "=3")
loetfehler = WorksheetFunction.CountIfs(Range("A2:A" & Zeilenzahl), barcode, Range("G2:G" &  _
_
Zeilenzahl), bauteil, Range("H2:H" & Zeilenzahl), "=6")
kurzschluss = WorksheetFunction.CountIfs(Range("A2:A" & Zeilenzahl), barcode, Range("G2:G" & _
_
Zeilenzahl), bauteil, Range("H2:H" & Zeilenzahl), "=9")
und noch einmal etwas kürzer:
    bauteilFehlt = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("H2: _
_
H" & Zeilenzahl), "=1")
xray = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("H2:H" &  _
Zeilenzahl), "=26")
bauteilFalsch = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("  _
_
H2:H" & Zeilenzahl), "=3")
loetfehler = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("H2:H" _
_
& Zeilenzahl), "=6")
kurzschluss = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("H2:  _
_
H" & Zeilenzahl), "=9")
Mein Function-Versuch:

Function zaehlen(x As String) As String
zaehlen = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, x)
End Function

Der Versuch bezieht sich auf den unteren Teil des Roh-Codes.
Wollte nicht den ganzen Code posten weil der nicht grade kurz ist, kann ihn bei Bedarf noch ranhängen.
Danke im Voraus!

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

Betreff
Datum
Anwender
Anzeige
AW: Function Hilfe
08.01.2018 13:59:01
Daniel
Hi
als erstes, fällt auf, dass in deiner Function für Bedingung x der Zellbereich fehlt, dh nochmal ein Range(...).
dein CountIf braucht immer eine gerade Anzahl an Parametern (immer das Paar Zellbereich+Bedingung)
du hast aber nur 3 und damit eine ungerade Anzahl.
zweitens, wenn du die Variable fehlercode in der Function nutzen willst, so musst du diese ebenfalls als Parameter übergeben, oder du musst sie als projektweit gültige Variable anlegen, sonst ist sie der Function nicht bekannt, bzw wird als neue leere Variable interpretiert, falls du nicht mit Option Explicit arbeitest.
um eine Variable projektweit gültig zu machen, muss sie in einem allgemeinen Modul oberhalb der Subs als Public deklariert werden
Gruß Daniel
Anzeige
AW: Function Hilfe
08.01.2018 14:13:55
Burak
Die Variable fehlercode ist als globale Variable deklariert. PS Option Explicit ist ebenfalls drin, auch wenn es dann wahrscheinlich doppelt gemoppelt ist :D
Bezüglich der zweiten Range, da die variiert (zwischen zwei verschiedenen) hatte ich gehofft, sie auch erst beim Funktionsaufruf mit zu übergeben.
Da es aber nur zwei Möglichkeiten gibt, kann man es auch mit zwei functions machen.
Also:
Function zaehlen(x As String) As String
zaehlen = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("H2:H" &  _
Zeilenzahl), x)
End Function
Und:
Function zaehlen(x As String) As String
zaehlen = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("G2:G" &  _
Zeilenzahl), x)
End Function
Und wie schreibe ich dann den Befehl oben?
kurzschluss = zaehlen("=9")
statt
kurzschluss = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("H2:H" & Zeilenzahl), "=9")

?
Anzeige
AW: Function Hilfe
08.01.2018 14:31:08
Daniel
Hi
Zeilenzahl muss ebenfalls projektweit gültig sein.
wenn der zweite Zellbereich ebenfalls veränderlich ist, muss er ebenfalls als Parameter übergeben werden, oder du musst dir zwei Funktionen schreiben und die unterschiedlich benennen:
a) zwei Funktionen:
Function zaehlenG(x As String) As String
zaehlen = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("G2:G" &   _
_
Zeilenzahl), x)
End Function
Function zaehlenH(x As String) As String
zaehlen = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range("H2:H" &   _
_
Zeilenzahl), x)
End Function
Kurzschluss = zählenH("=9")
oder b) eine Funktion mit der Spalte als zweiten Parameter:
function zaehlen(x as string, Spalte as string)
zaehlen = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), fehlercode, Range(Spalte & "2:" _
& Spalte & Zeilenzahl), x)
end function
kurzschluss = zaehlen("=9", "H")
wobei du nochmal über deine Spalten nachdenken solltest.
du hast hier im countif 2x die gleiche Spalte mit unterschiedlichen Vergleichswerten.
da im countIf die einzelnen Bedinungen mit UND verknüpft sind, ist das nur mit den Vergleichen GRÖSSER oder KLEINER sinnvoll, aber nicht mit IST GLEICH.
Gruß Daniel
Anzeige
AW: Function Hilfe
08.01.2018 14:42:00
Burak
alle variablen sind bei mir global, macht in diesem Fall keine Probleme
ja ist mir auch aufgefallen, war aber copy&paste von ähnlichen Funktionen mit unterschiedlichen Spalten, gucke grade ob ich da eins der beiden Bedingungen vorraussichtlich entfernen kann.
Also ich habe 3 textboxen wo er jedes mal den eingegebenen Wert in einer bestimmten Spalte sucht UND in der Spalte H den Wert ganz hinten (9, 3, 6, etc), was der Fehlercode ist.
Bei der einen Textbox gibt man den Fehlercode selbst ein. Da soll er zählen wie oft der Fehlercode vorkommt. also reicht da dann wohl
...CountIf(Range("H2:H" & Zeilenzahl), fehlercode)
Das mit den Functions klappt jetzt übrigens.
Danke dir :*
Anzeige
AW: Function Hilfe
08.01.2018 14:51:08
Burak
doch nicht, als was muss ich denn die variable "zaehlen" deklarieren?
Als Integer geht natürlich nicht, da sie ja eien Funktion ist.
Aber Dim zaehlen Function oder so gibt es nicht :(
    bauteilFehlt = zaehlenbch("=1")
xray = zaehlenbch("=26")
bauteilFalsch = zaehlenbch("=3")
loetfehler = zaehlenbch("=6")
kurzschluss = zaehlenbch("=9")
polaritaet = zaehlenbch("=25")
keinAOI = zaehlenbch("=-1")
fehlalarm = zaehlenbch("=0")
erfolgreich = zaehlenbch("=")

 Function zaehlenbch(x As String) As String
zaehlen = WorksheetFunction.CountIfs(Range("H2:H" & Zeilenzahl), barcode, Range("H2:H" &  _
Zeilenzahl), x)
End Function

Anzeige
AW: Function Hilfe
08.01.2018 15:19:38
Burak
hab es geschafft, musste die Funktion selbst als Integer deklarieren, nicht als String
AW: Function Hilfe
08.01.2018 15:30:38
Daniel
Hi
naja, einfach mal nachdenken, was man beim Zählen als Ergebnis bekommt, sicherlich keinen Text!
generell würde ich aber den Typ INTEGER nicht verwenden, sondern immer auf LONG gehen.
bei INTEGER ist der Zahlenraum zu begrenzt (c.a. +/-32.000) und du hast keinen Vorteil gegenüber dem Typ LONG.
Gruß Daniel

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige