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

Forumthread: Schleife - Wenn funktion mit zwei Bedingungen

Schleife - Wenn funktion mit zwei Bedingungen
28.01.2017 12:44:22
Mike
Hallo,
nach dem Dieter mir bei der Erstellung des SVerweis Makros geholfen hat und jetzt funktioniert.
Möchte ich es weiter optimieren.
Herausforderung:
In der Spalte C befinden sich Zellen mit dem Wert 0.
Darauf hin wird in gleichen Zeile in der Spalte F ein Datum eingetragen.
Aber nur dann wenn in der Spalte G keine 1 eingetragen ist.
Das Datum steht in der in der Zeile, wo der die erste 0 in der Spalte C gefunden wird.
Lösungsansatz:
In der Spalte C eine Schleife durchlaufen lassen, Dann mit der ersten Wenn-Funktion prüfen ob eine 0 als Wert in der Zelle eingetragen ist. Wenn diese erfüllt ist wird die zweite Wenn Funktion aktiviert und überpürft ob in der Spalte G eine 0 oder 1 steht.
Wenn beide Bedingungen erfüllt sind, soll das Datum was in der ersten Zelle in der Spalte F wo sich eine 0 in der Spalte C befindet in die darauf folgenden zellen, mit einem Wert 0 in Spalte C kopiert werden.
Ist es möglich eine Schleife mit zwei wenn - Funktion durchlaufen zu lassen ?
Kann jemand einen Lösungsansatz mit einem Code posten
Vielen Dank
Gruß Mike
Anzeige

15
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Schleife - Wenn funktion mit zwei Bedingungen
28.01.2017 14:35:35
Michael
Hi,
Sub machen()
Dim a, z&, t&, d
Const uebZ = 1
z = Range("C" & Rows.Count).End(xlUp).Row
If z  0
t = t + 1
Wend
d = a(t, 4)
If Not IsDate(d) Then MsgBox "Kein Datum": Exit Sub
If t > UBound(a) - 1 Then MsgBox "keine weiteren Daten": Exit Sub
For z = t + 1 To UBound(a)
If a(z, 1) = 0 And a(z, 5)  1 Then Range("F" & z) = d
Next
End Sub
Gruß,
Michael
Anzeige
AW: Schleife - Wenn funktion mit zwei Bedingungen
28.01.2017 15:20:51
Mike
Hallo,
erstmal danke für den Code: Ich hätte ein Frage zu dieser Zeile
Dim a, z&, t&, d muss hier nicht der Typ der Variable deklariert werden.
Ich bekomme bei starten eine Fehlermeldung :
Mehrfachdeklatarion im Gültigkeitsbereich
Gruß Mike
Schleife - Wenn funktion mit zwei Bedingungen
28.01.2017 15:45:52
Michael
Hi,
der Fehler: kann es sein, daß Du eine globale Variable gleichen Namens deklariert hast?
Lad halt mal ne Beispieldatei hoch - bei meiner "leeren" Datei geht's problemlos.
a ohne was wird durch die Bereichszuweisung zu einem "Array"
z und t sind Zeilennummern für die Schleifen, & = as Long
d ohne was (ohne was = as variant) habe ich ohne Typ verwendet, damit das Ding nicht stehenbleibt, falls Du in der ersten, gefundenen Zeile mit C=0 in F kein Datum stehen hast; naja, es bleibt stehen, aber mit Fehlermeldung.
Gruß,
M.
Anzeige
AW: Schleife - Wenn funktion mit zwei Bedingungen
28.01.2017 15:45:53
Mike
Hallo,
fehler beseitigt, ich hatte z schon als Variabe vergeben.
Gruß Mike
aha - zwei Hirne, ein Gedanke owT
28.01.2017 15:46:37
Michael
AW: aha - zwei Hirne, ein Gedanke owT
28.01.2017 16:15:10
Mike
Hallo,
alles läuft korrekt durch, bis auf diesen Punkt.
Es kommt vor das die Zahl in der Spalte C , die vorher eine 0 war, durch eine größere Zahl wieder ersetz wird. (Bsp 150)
Dann sollte in der Spalte F in dieser Zeile , das Datum wieder entfernt werden.
Gruß und Danke Mike
Anzeige
logisch bedenklich
28.01.2017 16:25:09
Michael
Hi,
woher soll ein Makro wissen, ob der Wert in C "vorher" 0 war oder nicht?
Hier müßte man dann noch eine Hilfsspalte konstruieren, in der vermerkt wird, ob das Makro das Datum in F gesetzt hat (weil C zum Zeitpunkt des Makrolaufs 0 war) oder nicht (zum Zeitpunkt des Makrolaufs stand z.B. 5 drin und F wurde nicht verändert - enthielt aber bereits ein Datum).
Das erscheint mir etwas wirr: ich empfehle Dir, etwas weiter auszuholen und den *ganzen Vorgang* mit Beispieldatei aufzudröseln.
Je nach Umfang kann es aber sein, daß ich mich aus dem Thread zurückziehe.
Gruß,
Michael
Anzeige
AW: logisch bedenklich
28.01.2017 16:37:08
Mike
Hallo,
ich hatte mir das so vorgestellt:
Logisch: Wenn ein Wert in Spalte C der größer als 0 ist, prüfe ob ein Datum in der Zeile in Spalte F eingetragen ist, wenn ja,entferne das Datum.
Es ist nur das Gegenteil von der anderen Wenn Funktion.
Gruß Mike
AW: logisch bedenklich
28.01.2017 16:57:53
Michael
Hi,
hier unabhängig von Spalte G:
Sub machen()
Dim a, z&, t&, d
Const uebZ = 1
z = Range("C" & Rows.Count).End(xlUp).Row
If z  0
t = t + 1
Wend
d = a(t, 4)
If Not IsDate(d) Then MsgBox "Kein Datum": Exit Sub
If t > UBound(a) - 1 Then MsgBox "keine weiteren Daten": Exit Sub
For z = t + 1 To UBound(a)
If a(z, 1) = 0 And a(z, 5)  1 Then Range("F" & z) = d
If a(z, 1)  0 And a(z, 4)  "" Then Range("F" & z) = Empty
Next
End Sub
Gruß,
Michael
Anzeige
AW: logisch bedenklich
28.01.2017 17:23:38
Mike
Hallo Michael,
funktioniert perfekt,
Danke dir
Gruß Mike
gern geschehen, Gruß zurück owT
28.01.2017 18:31:10
Michael
AW: gern geschehen, Gruß zurück owT
29.01.2017 01:05:31
Mike
Hallo Michael,
die CSV Datei speichert leider nicht das Datums Format was ich in der Spalte F eingestellt habe.
In der ersten Zeile in der Spalte F mit einem Datum ist dieses Format angegeben: mm/dd/yyyy
Mit diesen Format sollen auch die anderen Zellen in der Spalte F befüllt werden. Das Makro trägt das Datum mit diesen Format in die nachfolgenden Zellen ein. (dd.mm.yyyy)
Ich habe es mit Selection.NumberFormat = "mm/dd/yyyy" probiert doch das Makro meldet einen Fehler.
Gruß Mike
Anzeige
Formate
29.01.2017 16:20:43
Michael
Hallo Mike,
die Zeile
If a(z, 1) = 0 And a(z, 5)  1 Then Range("F" & z) = d

weist der Zelle in F ja nur einen Wert zu, ohne das Format zu ändern - d.h. wenn Du die ganze Spalte einfach so (ohne Makro) wie gewünscht formatierst, sollte das auch tun.
Ansonsten: Numberformat mit "MM/TT/JJJJ" (mit deutschen Buchstaben), oder man drückt sich um die ganze Geschichte und kopiert einfach die erste, gefundene Zelle:
Sub machen()
Dim a, z&, t&, d
Const uebZ = 1
Dim gemerkt As Range
z = Range("C" & Rows.Count).End(xlUp).Row
If z  0
t = t + 1
Wend
'd = a(t, 4) ' ersetzt durch nächste Zeile
Set gemerkt = Range("F" & t)
'If Not IsDate(d) Then MsgBox "Kein Datum": Exit Sub ' ersetzt
If Not IsDate(gemerkt) Then MsgBox "Kein Datum": Exit Sub
If t > UBound(a) - 1 Then MsgBox "keine weiteren Daten": Exit Sub
For z = t + 1 To UBound(a)
If a(z, 1) = 0 And a(z, 5)  1 Then gemerkt.Copy Range("F" & z) '***
If a(z, 1)  0 And a(z, 4)  "" Then Range("F" & z) = Empty
Next
End Sub

...was so natürlich nur Sinn macht, wenn das Datum als WERT, nicht als Formel drinsteht, sonst mit copy/paste values and formats.
Gruß,
Michael
P.S.: falls die Geschichte zickt, wäre ne Beispieldatei doch hilfreich.
Anzeige
AW: Formate
29.01.2017 16:37:12
Mike
Hi,
das war der veränderte Code , brachte die Lösung.
Nochmals Vielen Dank
Gruß Mike
freut mich, gern geschehen & Gruß owT
29.01.2017 18:35:07
Michael
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

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