1.4k Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)
Hallo,

ich habe in einer Zeile(3) eine Folge von Datumsangaben der Form "04.01.2016" usw.
In einem Array habe ich verschiedene Elemente des Typs Variant/Date mit dem gleichen Format wie Zeile(3). Über diese Array-Elemente will ich die Spaltennummer eines bestimmten Datums ermitteln:

Set rngS = Rows(3).Find(arrWerte(0, i), lookat:=xlWhole)

(arrWerte(0,i)="04.01.2016")

leider liefert mir der Code ausschließlich "Nothing".

Ich habe es auch mit

Set rngS = Rows(3).Find(CDate(arrWerte(0, i)), lookat:=xlWhole)


probiert, klappt aber auch nicht.
Hat jemand Rat?
Danke und Gruß Andreas

7 Antworten

0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi adreas ^^

deine erste variante funktioniert wenn das Array als date deklariert ist

gruss nighty
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo nighty,

danke für deine Antwort. Das Problem ist allerdings, dass das Array mehrdimensional ist, wobei arrWerte(0,i) das Datumsformat ist und z:b. arrWerte(1,i) eine string-Variable, arrWerte(2,i) double usw.
Gruß A.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo nighty,

du hast mich aber auf eine Idee gebracht.
Ich könnte ja das Array "teilen" in einen Date-Teil und einen anderen, die beide syncron laufen, also mit dem gleichen Zähler. Den ersten Teil könnte man ja zur Bestimmung der Spaltennummer nach der Datumsangabe verwenden. Ist ein bißchen umständlich... oder hat du noch eine andere Idee?
Gruß Andreas
0 Punkte
Beantwortet von nighty Experte (6.6k Punkte)
hi Andreas ^^

ein beispiel

gruss nighty

Sub dd()
Dim arrWerte() As Variant
arrWerte() = Range("A1:C3")
arrWerte(1, 1) = Date
Set rngS = Rows(3).Find(arrWerte(1, 1), lookat:=xlWhole)
Cells(rngS.Row, rngS.Column).Select
End Sub
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo nighty,
danke, das gefällt mir eigentlich ganz gut, nur verstehe ich die Zeile

arrWerte(1, 1) = Date

nicht. die setzt doch die Variable immer auf das Tagesdatum....oder?
Gruß Andreas
0 Punkte
Beantwortet von
Hallo Andreas,

deine Version funktioniert deshalb nicht, da du deinem Datenfeld
vom Typ Variant mit arrWerte(0,i)="04.01.2016" kein Datum sondern
einen String zuweist. Versuch es mal mit
arrWerte(0,i)=Cdate("04.01.2016")

Eine Variable oder eine Datenfeldposition vom Typ Variant nimmt
immer den Typ des ihm zuerst zugewiesenen Wertes an. Bei Nighty
wird mit der Zeile arrWerte(1, 1) = Date diese Position durch
Zuweisung des aktuellen Datums quasi indirekt als Datum
formatiert womit die Suche dort erfolgreich verläuft.

Das Problem ist allerdings, dass das Array mehrdimensional
ist, wobei arrWerte(0,i) das Datumsformat ist und z:b. arrWerte(1,i)
eine string-Variable, arrWerte(2,i) double usw.


nur mal so ein kleiner Tipp am Rande: Wenn du in nur einem Array
mehrere Typen wie, String, Date und Double unterbringen willst,
kann ein benutzerdefinierter Typ sinnvoll sein. Das kann dir die
weitere Bearbeitung etwas versüssen und du kannst sogar auf
CDate oder indirekte Typzuweisungen verzichten. Schau dir in
dem Zusammenhang mal die Type Anweisung an.

Hier mal ein kleines Beispiel:
In einem Standardmodul (und nur dort) schreibst du ganz
oben (also noch vor der ersten Sub):
Type MeinTyp
Text As String
Datum As Date
Zahl As Double
End Type
Die Namen der Variablen kannst du natürlich wie
immer frei wählen. Da Datum hier als Date formatiert ist sollte nun
auch eine Datumsangabe in Textform automatisch in ein Datum
umgewandelt werden.

Jetzt kannst du in jedem beliebigen Modul dein Array u.a. z. B. wie
folgt deklarieren:
Dim arrwerte(5) As MeinTyp
oder
Dim arrwerte() As MeinTyp
Redim arrwerte(5)

Damit kannst du dein Array wie ein Objekt behandeln, dessen
Eigenschaften du Werte zuweisen oder auslesen kannst. Die
Eigenschaften bilden somit die zweite Dimension, welche du nun
nicht mehr in der Klammer angeben musst.

arrwerte(1).Datum = "04.01.2005"
arrwerte(1).Text = "Hallo"
arrwerte(1).Zahl = 1

Gruß Mr. K.
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo zusammen,

danke für die Hilfe und die wirklich suuuper Antwort, besser als jedes Lehrbuch!! Das hilft nicht nur für das aktuelle Problem, sondern erweitert mein Verständnis dafür enorm!
Danke und Gruß Andreas
...