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

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

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
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
Anzeige
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.
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
Anzeige
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
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
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

357 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige