Live-Forum - Die aktuellen Beiträge
Datum
Titel
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
356to360
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
356to360
356to360
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

"Find" findet nicht in Formel

"Find" findet nicht in Formel
06.01.2004 23:22:32
Franz W.
Hallo Fachleute,

mit Hilfe von Lutz und Martin sind wir dran ein Problem zu lösen, es ist noch nicht gelöst, hat sich aber verändert. Darum wurde ich gebeten einen neuen Thread aufzumachen. Foldender Code findet das gesuchte Datum nicht, weil es nicht als Datum eingetragen ist, sondern in Form von Formeln vorliegt: A4 = A3 + 1:


Sub eintragen()
For e = 3 To ziel
On Error Resume Next
Set x = Sheets("Kalender").Range("A3:DP33").Find(termf(e)) ' Finde Feiertag...
t = x.Row
m = x.Column
If Not Cells(t, m).Comment Is Nothing Then Cells(t, m).Comment.Delete
If Not Cells(t, m) = 0 Then
Set cmt = Cells(t, m).AddComment _
(Text:=Chr(10) & " " & feiert(e) & " " & Chr(10) & " ")
With cmt.Shape
.TextFrame.AutoSize = True
.Fill.ForeColor.SchemeColor = 10
.TextFrame.Characters.Font.Size = 8
.TextFrame.Characters.Font.ColorIndex = 2
.TextFrame.Characters.Font.Bold = True
End With
End If
Next e
End Sub


Das Ganze um eine dreifach verschachtelte For-Next-Schleife zu vereinfachen. Wer sich beide Alternativen anschauen möchte, hier eine Beispieldatei:

https://www.herber.de/bbs/user/2795.xls

Das Makro steht im Modul "Eintragungen".

Vielen Dank im Voraus und Grüße
Franz

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Suche in xlFormulas...
06.01.2004 23:33:44
Boris
Hi Franz,

...und nicht in xlValues (was ohne Angabe genommen wird). Find ist da mit Datümern sehr eigen...

Wenn es dann nicht funktioniert: For Each... - das geht auf jeden Fall.

Grüße Boris

P.S: Habe mir das Beispiel und den anderen Thread noch nicht angeschaut...
Leider nein...
06.01.2004 23:41:55
Franz W.
Hi Boris,

es bleibt "x = Nothing", er findet also nicht. Mit einer Schleife haben wir es schon hinbekommen. Die Idee war, dass Find schneller sein müsste. Bleiben wir also bei der Schleife.

Vielen Dank und schönen Abend
Franz
Aber dafür so - kleines Beispiel:
07.01.2004 00:00:40
Boris
Hi Franz,

hab´s jetzt mal an einem ganz vereinfachten Beispiel getestet - siehe Anhang.
Das Suchdatum musste - obwohl es als Datum vorliegt - nochmal mit CDate umgewandelt werden. Gesucht wird in xlValues und xlWhole.


Sub finde()
MsgBox "Gefunden in Zeile " & Range("A:A").Find(CDate([c1]), , xlValues, xlWhole).Row
End Sub


https://www.herber.de/bbs/user/2796.xls

Grüße Boris
Anzeige
AW: Aber dafür so - kleines Beispiel:
07.01.2004 08:07:38
Franz W.
Guten Morgen Boris,

vielen Dank, dass Du Dich noch mal reinkniest. Aber bei mir haut's noch nicht. Entweder ist noch irgendwas anders als in Deinem Beispiel, oder ich schreib's nicht richtig:


Sub eintragen()
'####### Feiertage eintragen:   #######################################
For e = 3 To ziel
On Error Resume Next
'Set x = Sheets("Kalender").Range("A3:DP33").Find(termf(e), LookIn:=xlFormulas) ' Finde Feiertag...
Set x = Sheets("Kalender").Range("A3:DP33").Find(CDate(termf(e)), , xlValues, xlWhole) ' Finde Feiertag...
t = x.Row
m = x.Column
If Not Cells(t, m).Comment Is Nothing Then Cells(t, m).Comment.Delete
If Not Cells(t, m) = 0 Then
Set cmt = Cells(t, m).AddComment _
(Text:=Chr(10) & " " & feiert(e) & " " & Chr(10) & " ")
With cmt.Shape
.TextFrame.AutoSize = True
.Fill.ForeColor.SchemeColor = 10
.TextFrame.Characters.Font.Size = 8
.TextFrame.Characters.Font.ColorIndex = 2
.TextFrame.Characters.Font.Bold = True
End With
End If
Next e
End Sub


Werd mich aber weiter versuchen, kann aber jetzt grade nicht.

Vielen Dank und Grüße
Franz
Anzeige
AW: Aber dafür so - kleines Beispiel:
07.01.2004 08:28:05
Lutz
Guten Morgen Franz und Boris,

das Problem liegt sicher schon im Einlesen der Daten in termf. Auch hier wird ja an sich kein richtiges Datum eingelesen, sondern nur einzelne Zeichen. Vielleicht sollten wir diesen Punkt ja mal überdenken...

Gruß Lutz

Das Forum lebt auch von den Rückmeldungen !
AW: Aber dafür so - kleines Beispiel:
07.01.2004 09:07:21
Franz W.
Guten Morgen Lutz,

schön dass Du wieder mitmachst :-)))!!

Nein, eingelesen wird richtig, siehe mal meine eben gepostete Antwort an Boris, die Datei mit den Änderungen hab ich angehängt. Vielleicht hast Du noch eine weitere Idee, ich bislang nicht.

Beste Grüße
Franz
Anzeige
AW: Aber dafür so - kleines Beispiel:
07.01.2004 10:36:07
Lutz
nee...es will einfach nicht...
die Idee mit Find(Format..."d") hatte ich gestern auch schon, mit dem gleichen Ergebnis wie Du, also dass alle Kommentare in den Januar geschrieben wurden.

Habe Deine Schleife jetzt nochmal umgebaut (ohne Find). Ich habe dazu noch einen Bereich4 festgelegt und lasse das Ganze über For Each laufen. Weiß aber nicht, ob das zeitlich was bringt. Probiers mal aus...

https://www.herber.de/bbs/user/2799.xls

Gruß Lutz

Das Forum lebt auch von den Rückmeldungen !
Anzeige
Liegt noch irgendwie am Format
07.01.2004 09:05:02
Franz W.
Hi Boris,

bei mir sind die Zellen benutzerdefiniert als "T" formatiert. Hab jetzt mal Deinen Code leicht geändert:


Sub finde()
Dim r As Range
Set r = Range("A:A").Find(CDate([c1]), , xlValues, xlWhole)
If Not r Is Nothing Then
r.Select
Exit Sub
End If
MsgBox "Datum nicht gefunden"
End Sub



Und damit klappt es auch wunderbar. Ändere ich jetzt in Deiner Datei das Format in Spalte "A" auf "T", findet obiger Code nicht mehr, jetzt muss es so lauten:


Sub finde()
Dim r As Range
Set r = Range("A:A").Find(Format(CDate([c1]), "d"), , xlValues, xlWhole)
If Not r Is Nothing Then
r.Select
Exit Sub
End If
MsgBox "Datum nicht gefunden"
End Sub


Damit geht's wieder!


Das jetzt allerdings umgesetzt für mein Beispiel bringt jetzt einen ganz anderen Bock:


Sub eintragen()
For e = 3 To ziel
On Error Resume Next
'Set x = Sheets("Kalender").Range("A3:DP33").Find(termf(e), LookIn:=xlFormulas) ' Finde Feiertag...
'Set x = Sheets("Kalender").Range("A3:DP33").Find(CDate(termf(e)), , xlValues, xlWhole) ' Finde Feiertag...
Set x = Sheets("Kalender").Range("A3:DP33").Find(Format(CDate(termf(e)), "d"), , xlValues, xlWhole) ' Finde Feiertag...
t = x.Row
m = x.Column
If Not Cells(t, m).Comment Is Nothing Then Cells(t, m).Comment.Delete
If Not Cells(t, m) = 0 Then
Set cmt = Cells(t, m).AddComment _
(Text:=Chr(10) & " " & feiert(e) & " " & Chr(10) & " ")
With cmt.Shape
.TextFrame.AutoSize = True
.Fill.ForeColor.SchemeColor = 10
.TextFrame.Characters.Font.Size = 8
.TextFrame.Characters.Font.ColorIndex = 2
.TextFrame.Characters.Font.Bold = True
End With
End If
Next e
End Sub



Jetzt ist nicht mehr x = Nothing, es wird also gefunden. Aber die eingelesenen Werte werden auf ein anderes Datum gesetzt: Das heißt in der Zeile:

Set x = Sheets("Kalender").Range("A3:DP33").Find(Format(CDate(termf(e)), "d"), , xlValues, xlWhole)

ist termf(e) z.B. der 01.01.2004/Neujahr (es handelt sich ja hier um Feiertage), allerdings enthält x danach den 01.02.2004 !!

termf(e) = 06.01.2004 ergibt 06.01.2004 (das stimmt, wohl zufällig??)

termf(e) = 09.04.2004/Karfreitag ergibt für x = 09.01.2004.

Das heißt, es wird nur nach der ersten Zahl gesucht, und die wird ja in Spalte A bereits gefunden. Somit sind dann alle Feiertage im Januar markiert!! Bis auf Allerheiligen: das steht am 1. Februar *gg*. Da muss man wohl noch mal was bedenken.

Ich hab die Datei mal angehängt, das Makro steht im Modul "Eintragungen", aufzurufen durhc die Taste "Aktualisieren". Wenn es Dir zu viel Aufwand ist, schreib's, dann mach ich vielleicht mit dieser Frage einen neuen Thread auf.

https://www.herber.de/bbs/user/2797.xls

Bis hierher auf jeden Fall schon mal ganz herzlichen Dank !!!

Grüße
Franz
Anzeige
Viel zu gut :-))) leider :-((
07.01.2004 12:40:34
Franz W.
Hi Lutz,

das haut ja rein, das ist sogar bei diesem kleinen Makro schon spürbar schneller, tolle Lösung, vielen Dank!! Das jetzt eingesetzt im gesamten Makro der Realdatei würde mit Sicherheit was bringen.

Nur leider werde ich es in meiner echten Datei nicht einsetzen können, weil ich da den ganzen "Unterbau" umbauen müsste. Denn wenn in der Abteilung "Sonstiges" oder "Periodicals" im Blatt Daten am einem Feiertag was drin steht, wird der Name des Feiertages durch den Eintrag aus "Sonstiges" bzw "Periodicals" überschrieben (siehe Formel in den Zellen "DatCell"). Genau das ist auch der Grund, warum ich den Namen des Feiertages in einen Kommentar in der Datumspalte packen will; damit er trotzdem zur Verfügung steht.

Aber ich werde mal schauen, wie ich das einsetzen kann. Wäre ja schade, dieses "Juwel" ungenutzt zu lassen :-)))

Ganz vielen Dank und Grüße
Franz
Anzeige
Ohne Find und ohne Arrays
07.01.2004 12:03:23
Martin Beck
Hallo Franz,

da die Feiertage ja schon im Blatt Daten stehen, ist das einlesen in Arrays und das wiederfinden im Blatt Kalender eigentlich überflüssig. Es besteht eine eindeutige Zuordnung der Angaben in Blatt Daten, Spalten A und B, und der relevanten Zellen im Blatt Kalender, die wie folgt ausgenutzt werden kann:


Sub test()
ziel = 57 'Manuell aus der Datei entnommen
Worksheets("Kalender").Activate
For e = 3 To ziel
'On Error Resume Next
If IsDate(Worksheets("Daten").Cells(e, 1)) Then 'nur erforderlich wg. des Eintrags in Zelle A31 in der Beispieldatei 2797
t = Day(Worksheets("Daten").Cells(e, 1)) + 2         'neu
m = 10 * Month(Worksheets("Daten").Cells(e, 1)) - 9  'neu
If Not Cells(t, m).Comment Is Nothing Then Cells(t, m).Comment.Delete
If Not Cells(t, m) = 0 Then
Set cmt = Cells(t, m).AddComment _
(Text:=Chr(10) & " " & Worksheets("Daten").Cells(e, 2) & " " & Chr(10) & " ") 'geändert
With cmt.Shape
.TextFrame.AutoSize = True
.Fill.ForeColor.SchemeColor = 10
.TextFrame.Characters.Font.Size = 8
.TextFrame.Characters.Font.ColorIndex = 2
.TextFrame.Characters.Font.Bold = True
End With
End If
End If
Next e
End Sub


Gruß
Martin Beck
Anzeige
AW: Ohne Find und ohne Arrays
07.01.2004 12:17:42
Franz W.
Hallo Martin,

ja, das ist gut, vielen Dank. Ist für mich eine ganz neue Idee, wieder was dazugelernt.

Ganz vielen Dank und Grüße
Franz
AW: Ohne Find und ohne Arrays
07.01.2004 12:41:06
Lutz
Hi,

bei mir funzt das aber nur bedingt richtig, da er durch ziel=57 auch die Kommentare für 2005 einträgt. Es fehlt also die Jahreszuordnung.

Gruß Lutz

Das Forum lebt auch von den Rückmeldungen !
AW: Ohne Find und ohne Arrays
07.01.2004 12:44:48
Franz W.w
Hallo Lutz,

ja ist mir auch passiert. Aber das läßt sich ja einschränken. Da lässt sich ja fest die Zahl 29 vorgeben, der Bereich bleibt ja immer gleich, da ändert sich ja nix mehr dran.

Grüße
Franz
Anzeige
na dann wäre es das doch ! oT
07.01.2004 12:51:05
Lutz
AW: na dann wäre es das doch ! oT
07.01.2004 13:00:18
Franz W.
Hi Lutz und Martin,

ja, ist schon super das von Martin, wenngleich Lutz' letzte vielleicht noch schneller war. Werde jetzt mal schauen, welche der Varianten im Gesamtcode, der deutlich länger ist, dann tatsächlich am meisten bringt und was ich am besten einsetzen kann. Auf jeden Fall habe ich was dazu gelernt, u.a. neue Ideen, was man außer einer Schleife noch machen kann z.B.

In jeden Fall Euch beiden und auch an Boris ganz herzlichen Dank für Eure Hilfe, Ihr habt Euch mächtig reingehängt.

Beste Grüße
Franz
AW: na dann wäre es das doch ! oT
07.01.2004 13:15:22
Lutz
alles klar, ich werde auch noch mal schauen, vielleicht fällt mir ja noch was ein.
Bis denne

Gruß Lutz

Das Forum lebt auch von den Rückmeldungen !
Anzeige
AW: Ohne Find und ohne Arrays
07.01.2004 13:31:57
Martin Beck
Hallo Lutz,

wie ich in dem Kommentar zu der Zeile

Ziel = 57

schrieb, habe ich diesen Wert der Einfachheit halber aus der Tabelle Kalender abgeschrieben. In dem "echten" Makro wird der Wert ja "endogen" bestimmt, und dann läuft alles OK, war mir nur zu aufwendig, das nachzustellen.

Dein letzter Vorschlag ist übrigens auch gut, geht glaube ich von der Idee her auch in die gleiche Richtung wie meiner.

Gruß
Martin Beck
Wird immer kürzer :-)))
08.01.2004 14:57:26
Franz W.
Hallo Boris, Lutz, Martin,

hab jetzt noch was geändert, was auch nochmal was gebrahct hat:

es gibt in das Blatt "Kalender" Eintragungen aus mehreren Spalten aus dem Blatt Daten, die allerdings alle unterschiedlich lang sind. Bisher habe ich die alle in einer Schleife eingetragen, und habe für "ziel" die längste Spalte als Zielwert der Schleife ermittelt.

"For e = 3 To ziel" ging dann z.B. bis "ziel = 120", und das dann eben auch für die kürzeste Spalte, die nur bis 15 geht!!

Jetzt habe ich mal den Versuch unternommen, ob es in einzelnen Schleifen schneller geht. Lasse also jede Spalte in einer eigenen Schleife eintragen, jetzt aber mit "ziel" individuell maximal so groß, so viele Einträge es in der jeweiligen Spalte gibt, und siehe da: deutlich spürbar schneller :-))) (und das, obwohl durch Zerlegen in einzelne Schleifen die eine oder andere zusätzliche If-Abfrage nötig ist!!!) !!

Damit und mit einem Teil der Errungenschaften, bei denen Ihr mir geholfen habt, bin ich jetzt von vorher ca. 25 Sekungen auf 5-6 Sekunden runter. Und das freut mich schon sehr!! Wenn ich jetzt noch alles von Euch drin habe, krieg ich wahrscheinlich Zeit zurück, oder ;-)))??

Nochmal vielen Dank Euch und beste Grüße
Franz
Gratulation...
08.01.2004 15:57:21
Lutz
und von der Zeit, die Du dann zurück bekommst, hätte ich gern was ab ;-)

Gruß P@ulchen

Das Forum lebt auch von den Rückmeldungen !
Das hast Du Dir auch wahrlich verdient...
08.01.2004 16:30:23
Franz W.
... bei der Menge Zeit, die Du hierfür eingesetzt hast!!!

Grüße
Franz

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige