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-Key: 45952

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

Printed on: April 19, 2024 at 21:04 o'clock

Mitglied: 14695
14695 Dec 04, 2006 at 12:20:18 (UTC)
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
Member: Dogbert
Dogbert Dec 04, 2006 at 18:43:46 (UTC)
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
Member: Stefan764
Stefan764 Dec 04, 2006 at 20:19:50 (UTC)
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
Member: Biber
Biber Dec 04, 2006 at 22:28:10 (UTC)
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
Member: Dogbert
Dogbert Dec 04, 2006 at 23:26:18 (UTC)
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
Member: Forencamper
Forencamper Dec 05, 2006 at 07:49:38 (UTC)
Goto Top
Ist eine Excel Tabelle...
ich probier´s mal kurz aus...
Member: Stefan764
Stefan764 Dec 05, 2006 at 11:37:44 (UTC)
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
Member: Biber
Biber Dec 05, 2006 at 12:40:40 (UTC)
Goto Top
@Stefan764
...mein Kerngebiet ist die Automatisierungstechnik..
Meines auch... im weitesten Sinne face-big-smile

Gruß
Biber
Member: Forencamper
Forencamper Dec 05, 2006 at 12:46:14 (UTC)
Goto Top
passt!

Vielen Dank nochmals!^^