forencamper
Goto Top

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

Content-ID: 45952

Url: https://administrator.de/contentid/45952

Ausgedruckt am: 22.11.2024 um 19:11 Uhr

14695
14695 04.12.2006 um 13:20:18 Uhr
Goto Top
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
Dogbert
Dogbert 04.12.2006 um 19:43:46 Uhr
Goto Top
Servus Forencamper,

falls es sich um ein annähernd TSQL fähiges Format handelt (-> Access?) geht's einfach mit 'SELECT [Wasauchimmer] FROM [Tabelle] WHERE Date>[Startdatum] AND date<[Enddatum]'.

Gruß
Dogbert
Stefan764
Stefan764 04.12.2006 um 21:19:50 Uhr
Goto Top
Hallo,

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
Biber
Biber 04.12.2006 um 23:28:10 Uhr
Goto Top
@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:
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
Dogbert
Dogbert 05.12.2006 um 00:26:18 Uhr
Goto Top
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
Forencamper
Forencamper 05.12.2006 um 08:49:38 Uhr
Goto Top
Ist eine Excel Tabelle...
ich probier´s mal kurz aus...
Stefan764
Stefan764 05.12.2006 um 12:37:44 Uhr
Goto Top
@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?

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

Kein Problem : Ich auch face-wink , mein Kerngebiet ist die Automatisierungstechnik.

Grüße
Biber

Grüße
Stefan
Biber
Biber 05.12.2006 um 13:40:40 Uhr
Goto Top
@Stefan764
...mein Kerngebiet ist die Automatisierungstechnik..
Meines auch... im weitesten Sinne face-big-smile

Gruß
Biber
Forencamper
Forencamper 05.12.2006 um 13:46:14 Uhr
Goto Top
passt!

Vielen Dank nochmals!^^