VBA Auswertung: Problem mit Kriterien
[Edit Biber] Den gelösten Beitrag geschlossen und von Entwicklung nach Excel verschoben [/Edit]
Guten Morgen @all!
Ich habe folgendes Problem:
Ich habe eine Tabelle in der ich bestimmte Vorgänge
erfasse.
Die Vorgänge haben ein Start und ein Enddatum (tt.mm.jjjj).
Jetzt möchte ich über eine Form (in die ich dann textboxen einbaue) bestimmte Vorgänge anzeigen und auswerten, die in einen bestimmten Zeitraum fallen.
Bsp.
Ich will alle Vorgänge vom 01.01.2006 bis 01.04.2006
Ich gebe dies also in Meine Form ein (als Start und Enddatum).
Wie filtere ich das jetzt in der Tabelle?
Müsste so eine Art "between" sein?!?
Nach dem filtern benötige ich die Vorgänge dann
in einer Variablen, da ich die Vorgänge des bestimmten
Zeitraumes dann in ein anderes Tabellenblatt kopiere.
Kann mir vielleicht jemand helfen?
Vielen Dank im Voraus,
mfg
Forencamper
Guten Morgen @all!
Ich habe folgendes Problem:
Ich habe eine Tabelle in der ich bestimmte Vorgänge
erfasse.
Die Vorgänge haben ein Start und ein Enddatum (tt.mm.jjjj).
Jetzt möchte ich über eine Form (in die ich dann textboxen einbaue) bestimmte Vorgänge anzeigen und auswerten, die in einen bestimmten Zeitraum fallen.
Bsp.
Ich will alle Vorgänge vom 01.01.2006 bis 01.04.2006
Ich gebe dies also in Meine Form ein (als Start und Enddatum).
Wie filtere ich das jetzt in der Tabelle?
Müsste so eine Art "between" sein?!?
Nach dem filtern benötige ich die Vorgänge dann
in einer Variablen, da ich die Vorgänge des bestimmten
Zeitraumes dann in ein anderes Tabellenblatt kopiere.
Kann mir vielleicht jemand helfen?
Vielen Dank im Voraus,
mfg
Forencamper
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 45952
Url: https://administrator.de/contentid/45952
Ausgedruckt am: 22.11.2024 um 19:11 Uhr
9 Kommentare
Neuester Kommentar
Hoi!
Was heißt Tabelle, sind wir in Excel oder in Word oder... oder hast du es gar mit einem OLE zu tun?
Grüße aus Köln
Oli
Was heißt Tabelle, sind wir in Excel oder in Word oder... oder hast du es gar mit einem OLE zu tun?
Grüße aus Köln
Oli
Hallo,
Wenn es sich um Excel handeln sollte, würde ich das z.B. so machen :
mfG
Stefan
Wenn es sich um Excel handeln sollte, würde ich das z.B. so machen :
Sub Schaltfläche1_BeiKlick()
Start = DateValue("16.08.2003")
Ende = DateValue("28.09.2005")
ZielZ = 1
For QuellZ = 1 To 32767
If (Tabelle1.Cells(QuellZ, 1) > Start) And (Tabelle1.Cells(QuellZ, 1) < Ende) Then
Tabelle2.Cells(ZielZ, 1) = Tabelle1.Cells(QuellZ, 1)
Tabelle2.Cells(ZielZ, 2) = Tabelle1.Cells(QuellZ, 2)
Tabelle2.Cells(ZielZ, 3) = Tabelle1.Cells(QuellZ, 3)
Tabelle2.Cells(ZielZ, 4) = Tabelle1.Cells(QuellZ, 4)
Tabelle2.Cells(ZielZ, 5) = Tabelle1.Cells(QuellZ, 5)
ZielZ = ZielZ + 1
End If
Next
End Sub
mfG
Stefan
@Stefan764,
nicht reizlos, Deine Strategie, aber...
Änderungsvorschlag 1)
Bei diesem neumodischeren Excel-Krams so seit Windows 3.1 kann doch Excel schon bis 65536 Zeilen zählen AFAIK?
Änderungsvorschlag 2)
Da das aber stinkelangsam werden würde (auf meinen ollen Rechnern zumindest),
würde ich mich doch mit dem Durchwackeln der benutzten und nicht der auf der weiten Welt nutzbaren Zeilen zufrieden geben:
Laienhafte Frage 3) von mir:
Arbeitet Excel nicht durch Setzen und Anwenden eines "Filters" (über VBA natürlich) schneller als bei dem Versuch, die Schleifen zu Fuß nachzubilden?
[Ist wirklich als Frage gemeint - ich bin in Excel auch eher Noob.]
Grüße
Biber
nicht reizlos, Deine Strategie, aber...
Änderungsvorschlag 1)
Bei diesem neumodischeren Excel-Krams so seit Windows 3.1 kann doch Excel schon bis 65536 Zeilen zählen AFAIK?
Änderungsvorschlag 2)
Da das aber stinkelangsam werden würde (auf meinen ollen Rechnern zumindest),
würde ich mich doch mit dem Durchwackeln der benutzten und nicht der auf der weiten Welt nutzbaren Zeilen zufrieden geben:
Sub Schaltfläche1_BeiKlick()
....
QuellTabelleLastRow=Tabelle1.Cells(65536, 1).End(xlUp).Row
'<i>eigentlich</i> ...Tabelle1.Cells(Rows.Count, 1) ... und die "1" bedeutet: in Spalte A.
' natürlich unterstellt, dass keine der Spalten B....E in "tieferen" Zeilen gefüllt ist,
' während Spalte A (schon) leer ist.
For QuellZ = 1 To QuellTabelleLastRow
....
Next
...
End Sub
Laienhafte Frage 3) von mir:
Arbeitet Excel nicht durch Setzen und Anwenden eines "Filters" (über VBA natürlich) schneller als bei dem Versuch, die Schleifen zu Fuß nachzubilden?
[Ist wirklich als Frage gemeint - ich bin in Excel auch eher Noob.]
Grüße
Biber
Nochmals Servus,
in Bezug auf Excel hat ja biber eh schon den richtigen Ansatz mit den Filtern.
Also am besten einfach mal den Makrorekorder anschmeissen und auf einen Teilbereich die 2 verkettetten Filter (>Startdatum UND <Enddatum) anwenden. Danach dürfte ziemlich leicht zu finden sein wo die Extremwerte durch die Textboxeingabe und die Range-Auswahl durch eine Colum-Auswahl ersetzt werden müssen.
Hab's mit Open-Office ausprobiert, da geht's (dat kann aber kein VBA) - Excel benutze ich nur auf Arbeit.
Gruß
Dogbert
in Bezug auf Excel hat ja biber eh schon den richtigen Ansatz mit den Filtern.
Also am besten einfach mal den Makrorekorder anschmeissen und auf einen Teilbereich die 2 verkettetten Filter (>Startdatum UND <Enddatum) anwenden. Danach dürfte ziemlich leicht zu finden sein wo die Extremwerte durch die Textboxeingabe und die Range-Auswahl durch eine Colum-Auswahl ersetzt werden müssen.
Hab's mit Open-Office ausprobiert, da geht's (dat kann aber kein VBA) - Excel benutze ich nur auf Arbeit.
Gruß
Dogbert
@Stefan764,
nicht reizlos, Deine Strategie, aber...
Änderungsvorschlag 1)
Bei diesem neumodischeren Excel-Krams so
seit Windows 3.1 kann doch Excel schon bis
65536 Zeilen zählen AFAIK?
nicht reizlos, Deine Strategie, aber...
Änderungsvorschlag 1)
Bei diesem neumodischeren Excel-Krams so
seit Windows 3.1 kann doch Excel schon bis
65536 Zeilen zählen AFAIK?
Stimmt, ist mir noch gar nicht aufgefallen (meine Tabellen sind immer kleiner...)
Änderungsvorschlag 2)
Da das aber stinkelangsam werden würde
(auf meinen ollen Rechnern zumindest),
würde ich mich doch mit dem
Durchwackeln der benutzten
und nicht der auf der weiten Welt
nutzbaren Zeilen zufrieden
geben:
Sub
> Schaltfläche1_BeiKlick()
> ....
> QuellTabelleLastRow=Tabelle1.Cells(65536,
> 1).End(xlUp).Row
> '<i>eigentlich</i>
> ...Tabelle1.Cells(Rows.Count, 1) ... und die
> "1" bedeutet: in Spalte A.
> ' natürlich unterstellt, dass keine der
> Spalten B....E in "tieferen" Zeilen
> gefüllt ist,
> ' während Spalte A (schon) leer ist.
>
> For QuellZ = 1 To QuellTabelleLastRow
> ....
>
> Next
> ...
> End Sub
>
Gute Idee !
Laienhafte Frage 3) von mir:
Arbeitet Excel nicht durch Setzen und
Anwenden eines "Filters" (über
VBA natürlich) schneller als bei dem
Versuch, die Schleifen zu Fuß
nachzubilden?
Auch das stimmt - High-Level-Funktionen wie Filter sind natürlich wesentlich schneller, da sie in einer besseren Programmiersprache (warscheinlich C) geschrieben sind.
ABER: Eine Filterfunktion, die GENAU das macht, was ich will, kenne ich nicht.
UND: Wenn das Programm einmal die Woche 10 Sekunden Rechenzeit verschwendet, dann kann ich damit leben. (und ich denke Forencamper kann das auch)
[Ist wirklich als Frage gemeint - ich bin in
Excel auch eher Noob.]
Excel auch eher Noob.]
Kein Problem : Ich auch , mein Kerngebiet ist die Automatisierungstechnik.
Grüße
Biber
Biber
Grüße
Stefan
@Stefan764
Gruß
Biber
...mein Kerngebiet ist die Automatisierungstechnik..
Meines auch... im weitesten Sinne Gruß
Biber