Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Falsche Funktioswertzurückgabe

Forumthread: Falsche Funktioswertzurückgabe

Falsche Funktioswertzurückgabe
07.08.2002 19:13:44
Werner Hassold
Hi Leute,
ich habe folgende Funktion geschrieben:
-------------------------------
Function ZellWertErhöhen() as Integer
Dim Zahl as Integer
Zahl=0
Range("C5")
If Zelle.Value>0 then Zahl=1
ZellwertErhöhen=Zahl
End Function
-------------------------------
Nach meiner Meinung sollte der Rückgabewert der Funktion
entweder 0 oder 1 sein.
Zurückgegeben wird aber #Wert in der Zelle.
Wenn ich die If-Abfrage herausnehme wird folgerichtig
0 zurickgegeben.
Selbst wenn die If-Abfrage nicht richtig gestellt ist
gibt es eigendlich nur die Möglichkeit 0 oder 1.
Würde mich freuen wenn mir jemand weiterhilft.
Gruß Werner

Anzeige

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

Betreff
Datum
Anwender
Anzeige
Re: Falsche Funktioswertzurückgabe
07.08.2002 19:27:30
jinx
Moin, Walter,

die Zeile Range("C5") ist überflüssig, des weiteren bezieht sich Zelle.Value auf keinen zuweisbaren Wert - ersetze die Zeilen

Range("C5")
If Zelle.Value>0 then Zahl=1

durch

If Range("C5").Value > 0 Then Zahl = 1

HTH
jinx

Falscher Vorname - sorry, Werner! o.T.
07.08.2002 19:31:30
jinx
.
Re: Falsche Funktioswertzurückgabe
07.08.2002 19:55:04
Hans W. Hofmann
Zu Deiner Funktion gibt es ein Menge zu sagen:
- Sie hat keine EingangsParameter wird also nur einmal bei der Eingabe berechnet und dann nie mehr.
Was ist Zelle? Meinst Du sowas wie
Function ZellWertErhöhen(Zelle As Range) As Integer
ZellWertErhöhen = -(Zelle > 0)
End Function

Dann erhöht sich hier nix. Die Zelle weist entweder den Wert 0 oder 1 aus in Abhängigkeit der Übergabe Zelle,

Gruß HW

Anzeige
Re: Falsche Funktioswertzurückgabe
08.08.2002 17:22:03
Werner Hassold
Hi, Danke für eure Hilfe, hat mich etwas weitergebracht.
Da ich bisher mit Pascal programiert habe, fällt mir der
Syntax bzw. die lockere Art von Basic nicht leicht.
Ich habe eine Tabelle erstellt, die mir in 31 Zellen die monatlichen Tagen auflistet (C1..C31). In den Zellen werden
die Arbeitsstunden pro Tag eingetragen, die Wochenendtage
bleiben frei. In der Tabelle soll nun jede Zelle geprüft werden
ob mehr als NULL Stunden eingetragen sind, wenn ja wird der
Wert in Zelle C33 um 1 erhöht. So kann ich dann die Monats-
arbeitstage errechnen.
In Pascal wäre das kein Problem für mich, in VBA lese ich mich
durch meine Bücher und komme einfach nicht zum Erfolg.
Vielleicht kann mir ja jemand dieses Pascal-Program nach VBA
übersetzen:
----------------------------
Function ZellWerterhoehen:Integer;
Var i,Zahl:Integer;
Begin
Zahl:=0;
For i:=1 to 31 do If Zelle_C[i]>0 then inc(Zahl);
ZellWertErhoehen:=Zahl;
End;
------------------------------
Zelle_C wäre eine Globale (öffendlich) Veriable,
Var Zelle_C:Array[1..31] of Integer.
Die Funktion prüft die Zelle C1..C31 ob der sich darin befindende
Wert mehr als NULL ist, ist dies der Fall wird Zahl um 1 erhöht.
Wäre schön wenn ihr mir nochmal helfen könntest.
Gruß Werner

Anzeige
Re: Falsche Funktioswertzurückgabe
08.08.2002 19:34:30
Hans W. Hofmann
In Prinzip ja. Frag halt gleich richtig ;-)
Doch es gibt eine Tabellenfunktion, die die Funktionalität Deiner VBA-Konstruktion bereits kann.
=ZÄHLENWENN(C1:C31,">0")

Du kannst Deine PascalFunktion fast einszueins übertragen. Für
inc(zahl) ist zahl=zahl+1 zu setzen. Was aber zu beachten ist, ist die Wertübergabe an eine Funktion. Hast Du keine Übergabeparameter, wird die Funktion "flüchtig", das heist sie wird nicht in die Berechnungshierarchie von Excel eingebunden. In Pascal spricht man von Seiteneffekten, wenn Du Variablen unter Umgehung des Funktionskopfes in die Funktion einbringst - nicht gerade die feine englische Art ;-).
Nochmal: Keine externen Bezüge auf Tabellenzellen in VBA-Funktionen - shit happeneds auch in BASIC!


Gruß HW


Anzeige
Re: Falsche Funktioswertzurückgabe
09.08.2002 11:51:05
Werner Hassold
Hi HW, Danke für deine Hilfe.
-ZählenWenn- bringt mich leiter nicht weiter, weil der Wert in
der überprüften Zelle ingesamt inzugezählt wird! Ich will aber
die Tage zählen, das heist, wenn der Wert in der bestimmten
Zelle über NULL ist soll der Wert in C33 immer um 1 erhöht wer-
den, ZählenWenn erhöht aber immer um den Wert der gerade in der
überprüften Zelle steht.
So sieht die Tabelle aus.
------------------------------------
C
Arbeitsstd.
1 -- 9
2 -- 8
3 -- 10
.. -- ..
31 -- 5
32
33 -- 4 Rem ;in diesem Fall wären es 4 Tage
--------------------------------------------------
Ich könnte dir die Mappe mal zusenden wenn ich deine eMail hätte,
würde mich freuen wenn du mir die Lösung reinschreibst.
Gruß Werner
WHassold@t-online.de



Anzeige
Re: Falsche Funktioswertzurückgabe
09.08.2002 17:42:25
Hans W. Hofmann
Hm ich kann Deiner Argumentation nicht so folgen. ZÄHLENWENN mach genau das, was Du programmiert hast?
Meine EMail steht in jedem Beitrag unter meinem Namen...

Gruß HW

;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige