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

leere Zelle keine Berechnung

leere Zelle keine Berechnung
26.05.2009 17:52:49
marc
Hallöle...
nachdem bei meiner letzten Frage gute Antworten kamen (Dank vor allem an Daniel) versuchs ich nochmal in diesem Forum.
Zu meinem Problem:
Ich lasse in Excel 2007 Daten aus einem gewählten Bereich eines Sheets in einem anderen Sheet berechnen.
Bsp. Zu errechnende Daten in Sheet 1 Zelle A1; berechnete Daten (per Makro) angezeigt in Sheet 2 Zelle A1.
Jetzt ist das Problem, das der Bereich der zu berrechnenden Daten variert.
Bsp. Manchmal bis zur 200ten Spalte/600ten Zeile, manchmal 100ten Spalte/200 Zeile...etc
Also gesamten Bereich Sheet 2 mit Makro hinterlegt, um immer eine Auswertung der Daten zu erhalten. Wenn jedoch keine Daten in der Zelle Sheet 1 vorhanden sind, rechnet Excel mit 0 und dementsprechend kommt Müll raus. Mir wäre jedoch lieber, das nur wenn ein Wert in Sheet 1 eingegeben wird, eine Berechnung erfolgt.
D.h.
Kein Wert Sheet 1, korrespondierende Zelle Sheet 2 bleibt leer!!!
Wie kann ich das erreichen?
Gibt es eine Funktion in Excel 2007 die das bewältigt? Oder muss man auch hier ein Makro schreiben? Hat vielleicht schon mal jemand ein ähnliches Problem gehabt und sich bereits "durchgekaut"?
Lösungen, Vorschläge?
M.Vogel

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

Betreff
Datum
Anwender
Anzeige
WENN(... ? oder Makro?
26.05.2009 20:17:24
Erich
Hi Marc,
so ganz klar wird die bei dir vorliegende Situation nicht. Was meinst du mit
"Also gesamten Bereich Sheet 2 mit Makro hinterlegt, um immer eine Auswertung der Daten zu erhalten."
Wie hinterlegt man einen Bereich mit einem Makro?
Gehts hier um ein Ereignismakro? Oder eine UDF (benutzerdefinierte Funktion)?
Wenn in Sheet2 nur einfach eine Formel steht, könntest du das so machen:
WENN(ISTLEER(Sheet2!A1);"";deinebisherigeFormel)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: WENN(... ? oder Makro?
27.05.2009 12:24:32
marc
Hallo Erich,
Formulierungen so kurz vorm Feierabend können schon mal schwammig sein ;-)-
Es handelt sich um eine benutzerdefinierte Funktion in einer (mehrere) Zelle(n), die ihre zu errechnenden Daten aus den Zellen eines anderes Sheets holt. Wenn aber eine dieser Zellen (Sheet 1) leer ist möchte ich keine Berechnung haben, sondern einfach eine leere Zelle (Sheet 2) ohne irgendwelche Ausgabe.
Werde mal probieren deinen Vorschlag in mein Makro einzufügen.
Danke für die schnelle Antwort
Gruß M. Vogel
Anzeige
Eine UDF hat IMMER einen Wert
27.05.2009 13:00:05
Erich
Hi Marc,
so, es geht also um eine benutzerdefinierte Funktion.
Wenn du in einer Zelle die Funktion nutzt, steht in der Zelle jedenfalls ein Wert.
Das kann eine Zahl, ein Text, eine Zeichenkette der Länge 0 ("") sein, auch ein Fehlerwert.
Dein Wunsch

"möchte ich keine Berechnung haben,
sondern einfach eine leere Zelle (Sheet 2) ohne irgendwelche Ausgabe"

ist NICHT machbar.
Welchen Typ hat deine UDF? (Also: Welchen Typ hat der Funktionswert der UDF?)
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

AW: Eine UDF hat IMMER einen Wert
27.05.2009 15:18:20
marc
Hmmm....Passiert mir doch recht oft, das ich an die Grenzen von Excel stoße....
Obs an mir liegt ;-)
Typ UDF:
Double
Hier mal die ganze Funktion:

Public Function TestmakroRGBnachX(ByVal R As Double, G As Double, B As Double, xn As Double) As  _
Double
'--- Schritt 1
R1 = R / 255
'--- Schritt 2
G1 = G / 255
'--- Schritt 3
B1 = B / 255
'--- Schritt 4
If R1 > 0.0405 Then
R2 = ((R1 + 0.055) / 1.055) ^ 2.4
Else
R2 = R1 / 12.92
End If
'--- Schritt 5
If B1 > 0.0405 Then
B2 = ((B1 + 0.055) / 1.055) ^ 2.4
Else
B2 = B1 / 12.92
End If
'--- Schritt 6
If G1 > 0.0405 Then
G2 = ((G1 + 0.055) / 1.055) ^ 2.4
Else
G2 = G1 / 12.92
End If
'--- Schritt 7
R3 = R2 * 100
'--- Schritt 8
G3 = G2 * 100
'--- Schritt 9
B3 = B2 * 100
'--- Schritt 10
x = 0.6502043 * R3 + 0.1780774 * G3 + 0.1359384 * B3
'--- Schritt 11
x1 = x / xn
'--- Schritt 12
If x1 > 0.008856 Then
x2 = x1 ^ (1 / 3)
Else
x2 = 7.787 * x1 + 16 / 116
End If
TestmakroRGBnachX = x2
End Function


R1, G1, B1 sind sozusagen die Startwerte aus Sheet 1, 2, 3, Berechnung und Ausgabe Sheet 4, 5, 6.
In dieser Funktion hier x2
Es gibt noch 2 weitere Funktionen zur Berechnung von y2 und z2, die jeweils in einem anderen Sheet berechnet und ausgegeben werden.
Zur Übersicht:
Sheet 1=R-Werte (R1)
Sheet 2=G-Werte (G1)
Sheet 3=B-Werte (B1)
Sheet 4=X-Werte Funktion 1 (x2)
Sheet 5=Y-Werte Funktion 2 (y2)
Sheet 6=Z-Werte Funktion 3 (z2)
Ich dachte an etwas wie:
"Wenn Zelle leer, keine Berechnung; Wenn Zelle Zahlen enthält, starte Makro!...
Wie setzte ich das am Besten um?

Anzeige
UDF ändern? Bedingter Aufruf?
27.05.2009 20:02:31
Erich
Hi Marc,
deine UDF weiß nichts von einem Sheet, auch nichts von Zellen.
Sie berechnet aus vier Double-Zahlen eine fünfte, sonst nichts.
(Allenfalls ließe sich in der UDF noch der Aufrufer (Caller) ermitteln, aber das hilft hier nicht weiter.)
Übrigens: Von den Parametern ist nur der erste ByVal, die anderen nicht. Wenn du das willst, musst du
ByVal R As Double, ByVal G As Double, ByVal B As Double, ByVal xn As Double schreiben.
Die Parameter haben den Typ Double. Wenn du beim Aufruf in der Tabelle den Bezug zu einer leeren Zelle angibst,
wird 0 (die Zahl Null) and die UDF übergeben.
Die UDF kann nicht erkennen, ob der Wert aus einer Zelle kommt und ob dann in der Zelle eine 0 oder nichts steht.
Die UDF hat den Typ Double, also wird sie eine Double-Zahl als Wert liefern (oder einen Fehler).
Du kannst das alles natürlich ändern, etwa so:
TestmakroRGBnachX(ByVal R As Range, G As Range, B As Range, _
xn As Range) As Variant
Wenn du R, G, B und xn als Bereiche übergibst, kann die Fkt. prüfen, ob einer dieser Bereiche leer ist.
Und wenn du die Fkt. als Variant deklarierst, kann sie auch z. B. eine leere Zeichenkette zurückgeben.
Eine andere Möglichkeit:
Du prüfst die benötigten Zellen in der Excelformel auf "Leer" und rufst die Fkt. gar nicht erst auf,
wenn eine dieser Zellen leer ist.
Es kommt vor allem darauf an, was du erreichen und wie du mit den Ergebnissen weiterarbeiten willst.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: UDF ändern? Bedingter Aufruf?
29.05.2009 17:54:28
marc
Hallo Erich,
Ah...o.k...danke für die Hinweise und Vorschläge. Ich werd sie mir über das Pfingstwochenende mal durch den Kopf gehen lassen.
Noch eine andere Frage:
Ich habe folgende Excelformeln und bekomme bei der Übertragung in eine VBA-Funktion (wieder aus mehreren Schritten bestehend...) eine Fehlermeldung, mit der ich noch nicht viel Anfangen kann.
WENN(C12>0;GRAD(ARCTAN2(C11;C12));360+GRAD(ARCTAN2(C11;C12)))
WENN(C21>0;GRAD(ARCTAN2(C20;C21));360+GRAD(ARCTAN2(C20;C21)))
VBA meckert bei dem ";" Zeichen zwischen (z.B. C11;C12) rum.
Was mache ich falsch? Was muss ich beachten? Evtl. wie heißt die richtige Synthax für solche Fälle?
Da ich mir bei IF-Then-Else Funktionen noch nicht so sicher bin, wäre es nett folgende Formelübertragung mal zu beurteilen.
Excel:
mean h2'
=WENN(ABS(C23-C14) Mein VBA-Vorschlag:
If Abs(h2STRICH - h1STRICH) mean h2STRICH = (h2STRICH + h1STRICH) / 2
Else
mean h2STRICH = (h2STRICH + h1STRICH - 360) / 2
End If
Stimmt das von der Synthax her?
Schönes Pfingstwochenende
Gruß Marc
Anzeige
Formeln in VBA
29.05.2009 19:28:42
Erich
Hi Marc,
das mit "mean h2STRICH" wird so nicht klappen. Ein Variablenname kann kein Leerzeichen enthalten,
du müsstest dann z. B. mean_h2STRICH schreiben, also mit einem Unterstrich.
Probier mal (ungetestet):

Sub Formeln()
Dim dblC11 As Double, dblC12 As Double
Dim xyzErg As Double
Dim h2STRICH As Double, mh2STRICH As Double, h1STRICH As Double
' TEIL 1:
With Application.WorksheetFunction
dblC11 = Cells(11, 3)
dblC12 = Cells(12, 3)
'WENN(C12>0;GRAD(ARCTAN2(C11;C12));360+GRAD(ARCTAN2(C11;C12)))
xyzErg = .Degrees(.Atan2(dblC11, dblC12)) - 360 * (dblC12 > 0)
End With
' TEIL 2:
' so:
If Abs(h2STRICH - h1STRICH) 

Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort

Anzeige

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige