Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
152to156
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
152to156
152to156
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

VBA: "Äpfel mit Birnen vergleichen

VBA: "Äpfel mit Birnen vergleichen
26.08.2002 14:48:43
Tobias Wutschka
Hallo Forum,
mit folgendem Code will ich einen Zähler einrichten:
If Sheets(1).Cells(Zeile, 8) <> "" Then
'Monat in Liefertabelle suchen
ZeileLief = 5
While ActiveSheet.Cells(ZeileLief, 2) <> ""
Ausgeschrieben = ActiveSheet.Cells(ZeileLief, 2)
MsgBox Ausgeschrieben & "-" & Str(Sheets(1).Cells(Zeile, 8))
If Ausgeschrieben = Str(Sheets(1).Cells(Zeile, 8)) Then
ActiveSheet.Cells(ZeileLief, 4) = ActiveSheet.Cells(ZeileLief, 4) + 1
End If
ZeileLief = ZeileLief + 1
Wend
...
Jedoch ist der eine Ausdruck [ActiveSheet.Cells(ZeileLief, 2)] ein formatiertes Datum der Form Januar 01 und der andere Ausdruck [Str(Sheets(1).Cells(Zeile, 8))] Text mit dem Inhalt Januar 01. Wie kann ich VBA dazu verablassen, mir meine Äpfel bei Birnen mitzuzählen.

Bin für jede Hilfe dankbar und danke schon im Voraus
Tobias

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

Betreff
Datum
Anwender
Anzeige
Re: VBA: "Äpfel mit Birnen vergleichen
26.08.2002 14:59:10
Charlie
Hallo Tobias,

mit CDate kannst Du den Text "Januar 01" in das Datum 01.01.2001 umwandeln. Somit kannst Du Gleiches mit Gleichem vergleichen und der Vergleich "Äpfel mit Birnen" bleibt Dir erspart.

Viel Erfolg,
Charlie

Leider nicht
26.08.2002 15:02:09
Tobias Wutschka
Ihm folgenden habe ich den Vergleich Text mit Text, so dass der Text bestehen bleiben müsste. :(
Re: VBA: "Äpfel mit Birnen vergleichen
26.08.2002 15:04:48
Folker
Du wirst auf jeden Fall beide Ausdrücke ins geliche Format bringen müssen.
Gib der Spalte2 mit dem Text das Datumsformat von Spalte1.
Dann Spalte markieren -> Text in Spalten -> getrennt -> kein trennzeichen angeben (soll ja in einer spalte bleiben) -> Datum -> fertig
dann erkennt er es dir als Datum an.
Anzeige
Re: Leider nicht
26.08.2002 15:08:23
Charlie
Hallo Thobias,

wo ist das Problem? Du wandelst Deinen String doch nicht dauernd bzw. bleibend um, sondern nur für den Vergleich. Du kannst den String ja auch in eine Variable schreiben (auf die kannst Du dann immer wieder zugreifen) und beim Vergleichen wandelst Du in ein Datum um:

Viel Erfolg,
Charlie

Leider auch nicht s.u. (o.T.)
26.08.2002 15:08:57
Tobias Wutschka
o.T.
Noch nicht
26.08.2002 15:23:38
Tobias Wutschka
Der Ansatz klingt nicht schlecht, aber der Text wird anscheinend nicht als Datum erkannt da, die MsgBox immernoch 18.05.01 - Januar 01 ausgibt. Und das Problem wird sein, wenn er es umwandelt klappt es bestimmt auch nicht, weil 18.05.01 und 01.05.01 auch nicht gleich sind.
Mein Formatbefehl fürs umwandeln ist
Selection.NumberFormat = "[$-407]mmmm yy;@"
Kann ich nicht mein Datum in der Form wies jetzt ist als Januar 01 in Text umwandeln und dann vergleichen?
Anzeige
Danke, Funktioniert...
26.08.2002 15:39:08
Tobias Wutschka
Musste CDate auf Ausgeschrieben beziehen und vergleiche nur 6 Stellen von rechts das haut hin.

Danke für eure Hilfe!

Re: Danke, Funktioniert...
26.08.2002 15:48:59
Charlie
Hallo Tobias,

eigentlich ist es jetzt schon egal, weil Du eine andere Lösung gefunden hast. Aber klar musste die Msgbox ein falsches Ergebnis liefern, weil das Umwandeln mit CDate ja erst 1 Zeile tiefer erfolgt ist. Und Du kannst in den String ja auch den Tag mit einbeziehen, mit dem Du vergleichen willst. Hier wäre die angepasste ursprüngliche Variante:

Viel Erfolg,
Charlie

Zählt, aber falsch
26.08.2002 16:04:11
Tobias Wutschka
Komischerweise zählt er mit meiner Methode:
ZeileLief = 5
While ActiveSheet.Cells(ZeileLief, 2) <> ""
Ausgeschrieben = ActiveSheet.Cells(ZeileLief, 2)
StrDatText = Str(Sheets(1).Cells(Zeile, 8))
If Right(CDate(Ausgeschrieben), 7) = Right(StrDatText, 7) Then
MsgBox CDate(Ausgeschrieben) & "-" & StrDatText
ActiveSheet.Cells(ZeileLief, 4) = ActiveSheet.Cells(ZeileLief, 4) + 1
End If
ZeileLief = ZeileLief + 1
Wend

Zwar zu einzelnen Punkten etwas dazu, aber falsch: Das Jahr 2001 wird bei 2003 zugerechnet. Wie könnte ich denn eine Schleife fahren, die universell funktioniert?
Nach dem Motto Wenn Datum größer als in dieser Zeile aber kleiner als in der nächsten Zeile, dann zähle eins dazu. Muss ic h halt in den saueren Apfel beissen und meinen Textvergleich auch auf Datum umstricken...

Anzeige
Re: Zählt, aber falsch
26.08.2002 17:05:10
Charlie
Hallo Tobias,
jetzt steig i schön langsam aus...:((

Was vergleichst Du da eigentlich? CDate bei einer Variablen, die ohnehin einen reinen Datumswert enthält, ist unnötig und Right(.., 7) von einem Datumswert kann doch nicht gleich sein mit Right(.., 7) von Text?!?!

Warum weigerst Du Dich denn so beharrlich, NUR für den Vergleich den String in ein Datum umzuwandeln. Ob Datum = CDate(Irgendwas) sollte Excel wohl hinkriegen. Dann solltest Du auch kein Problem mehr haben mit Jahr >= gleiche Zeile aber < nächste Zeile. Entweder ist es gleich oder nicht. Was Du da offensichtlich versuchst, ist so zu tricksen, dass trotz fraglichem Vergleich das Richtige passiert. Beim Tricksen ist es aber oft so, dass plötzlich Richtiges nicht mehr gemacht wird.

Gruß,
Charlie

Anzeige
Re: Zählt, aber falsch
26.08.2002 17:15:00
Tobias Wutschka
Problem ist, dass ich Monatsweise auswerten will, also muss ich doch versuchen die Daten die ich habe z.B. 18.05.02 dem Monat Mai zuzuordnen. Vorher stand bei der Beschriftung zu Mai "Mai 01" als Text. Jetzt hab ich das ganze als Datum geändert und umformatiert, also aus 01.05.02 wird dann wieder Mai 01 dargstellt. Jetzt vergleiche ich Datum grösser als die Beschriftung und kleiner als der Wert der Beschriftung der Folgezeile, um wieder richtig zu zählen.
Vielleicht gibt es da eine elegantere Methode
Und sie bewegt sich doch
26.08.2002 18:22:37
Tobias Wutschka
If Sheets(1).Cells(Zeile, 8) <> "" Then
'Monat in Liefertabelle suchen
ZeileLief = 4 ' War 5
While ActiveSheet.Cells(ZeileLief, 2) <> ""
NextLinie = ZeileLief + 1
Ausgeschrieben = ActiveSheet.Cells(ZeileLief, 2)
StrDatText = Sheets(1).Cells(Zeile, 8)
Naechster = ActiveSheet.Cells(NextLinie, 2)
If StrDatText >= Ausgeschrieben And StrDatText < Naechster Then
MsgBox Ausgeschrieben & "<" & StrDatText & "<" & ActiveSheet.Cells(NextLinie, 2)
ActiveSheet.Cells(ZeileLief, 4) = ActiveSheet.Cells(ZeileLief, 4) + 1
End If
ZeileLief = ZeileLief + 1
Wend

Jetzt habe ich meine Werte als Datum formatiert und ordne so über den Vergleich die Daten dem richtigen Monat zu.

Danke für die Hilfe, die Lösung mag zwar nicht die eleganteste Sein, aber ich bin ja auch kein Vollblutprogrammierer ;)

Anzeige
Re: Und sie bewegt sich doch
26.08.2002 18:30:49
Charlie
Hallo Tobias,

leider kann ich das Vergleichsproblem noch immer nicht ganz nachvollziehen. Dazu wäre es hilfreich, wenn ich die Datei sehen könnte. Meine Vorstellungskraft scheint heute nicht besonders ausgeprägt zu sein. Bin leider ziemlich müde und ausgelaugt. :(

Egal, ob elegant oder nicht, wichtig ist, es funktioniert! Du willst ja sicher keinen Wettbewerb mit Deinem Makro gewinnen, oder?

Du kannst das ganze aber noch etwas übersichtlicher machen, indem Du alles in ein

packst. Dann brauchst Du die Zellen nicht immer mit der ganzen Länge (ActiveSheet.Cells....) referenzieren. Das macht den Code auch leichter lesbar.

Gruß,
Charlie

Anzeige
Re: Und sie bewegt sich doch
26.08.2002 18:37:25
Tobias Wutschka
In wie weit beeinflusst das den Ausdruck Sheets(1).Cells(Zeile, 8) Wenn ich das reinpacke, weil die Daten ja auf zwei verschiedenen Blättern liegen?
Re: Und sie bewegt sich doch
26.08.2002 18:44:11
Charlie
Hallo Tobias,

das darfst Du natürlich nicht ändern, weil damit ja offensichtlich ein anderes als das aktive Blatt angesprochen wird. "With ActiveSheet" bedeutet, dass sich alles bis "End With" auf das aktive Blatt bezieht, es sei dann, es befindet sich darin eine besondere Referenzierung auf ein bestimmtes Blatt bzw. eine bestimmte Zelle, wie z.B. Sheets(1).Cells(Zeile, 8).

Gruß,
Charlie

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige