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

Vergleich Variable mit Zellinhalt

Vergleich Variable mit Zellinhalt
28.07.2003 08:52:03
ThomasJ
Hallo,
ich möchte mir die Zellen mit einem bestimmten Datum anschauen. Dazu habe ich folgendes "konstruiert":
For i = 38078 To 38442
For j = 5 To 999

If i = Cells(4, j) Then
Range("a5:d999").AutoFilter Field:=4, Criteria1:=">=38078", Operator:=xlAnd, _ Criteria2:="<38443"
.
.
.
Range("A5").Select

End If

Next j
next i
So, das Problem ist nun, dass ich keine Ahnung von VBA hab und er mir ständig anzeigt, dass es einen Fehler bei "if i=cells(4,j) then" gibt.
Die Zeile soll bedeuten: wenn i (datum) ist gleich mit cells(4,j) (das bereits vorhandene datum in den zellen d4 bis d999) dann ...
Helft mir bitte!
Thomas

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Vergleich Variable mit Zellinhalt
28.07.2003 09:00:21
Guenter aus Do
Hallo Thomas
mit deiner Anweisung
For j = 5 To 999
if i = Cells(4, j) Then
wird versucht alle Zellen der 4 Zeile zu durchsuchen. Da aber nur 256 Spalten in einer Zeile sind,
wird dein Programm ab 257 abbrechen.
Ich glaube du hast hier die zeile mit der Spalte verwechselt
Günter aus Do

AW: Vergleich Variable mit Zellinhalt
28.07.2003 09:27:24
ThomasJ
Vielen Dank, Günter!!!
Wieder was dazugelernt. Und ich hatte schon das Vertrauen in mich verloren, nachdem ich schon alles mögliche in verschiedenen Variationen ausprobiert habe.
Nun bin ich aber mit dieser Lösung nicht so recht zufrieden.
Das Vergleichen bzw. berechnen dauert einfach viel zu lange. Es dauert ca. 5sec. bis er mit diesen 2 Schleifen fertig ist.
Kann das denn sein???
Der Rechner ist eigentlich schnell.
Thomas

Anzeige
AW: Vergleich Variable mit Zellinhalt
28.07.2003 09:46:59
Guenter aus Do
Hallo Thomas
durch deine beiden Schleifen muß der Rechner
364*994 Zellen durchlaufen das sind ca. 360.000 Datenfelder das dauert seine Zeit.
Ich weiß nicht was du genau machst, aber dein Code
sieht irgendwie "komisch" aus. Ich glaube du solltest nochmals etwas
Hirnschmalz aufwenden.
Guenter aus Do

AW: Vergleich Variable mit Zellinhalt
28.07.2003 10:01:00
ThomasJ
Nun gut, eigentlich wollte ich hier niemanden mit meinem Newbie-Zeugs belästigen, aber jetzt erklär ich mal kurz was ich machen will.
Habe ein Sheet mit TelNr, Rechnungsbetrag, Zeitraum, etc.
Der Zeitraum ist im Format MMM JJ
Es befinden sich mehrere Schaltflächen (über Formular eingefügt) und mehrere Makros (über Makrorekorder aufgenommen)
Habe mehrere andere Sheets: 2002 - 2005
Makro 2002 (Schaltfläche 2002) z.B. soll nun alle Angaben (TelNr, Rechnungsbetrag, Zeitraum) des Geschäftsjahres 2002 (Apr 02 - Mrz 03) in den Sheet 2002 übertragen.
Ausserdem sollen die Arbeitsblätter geschützt sein und bleiben.
Hier nun der "code" (wenn man ihn so nennen kann):

Sub Blatt2004()
' Blatt2004 Makro
' Makro am 24.07.2003 von Anwender aufgezeichnet
Dim i, j
Dim Zellen
Sheets("2004").Select
ActiveSheet.Unprotect
Range("a5:d999").Clear
Sheets("Rechnungen").Select
ActiveSheet.Unprotect
For i = 38078 To 38442
For j = 5 To 999
If i = Cells(j, 4) Then
Range("a3:a4").AutoFilter Field:=4, Criteria1:=">=38078", Operator:=xlAnd, _
Criteria2:="<38443"
Range("a5:d999").Copy
Sheets("2004").Select
Range("A5").Select
ActiveSheet.Paste
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Rechnungen").Select
Selection.AutoFilter
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("A5").Select
Sheets("2004").Select
Range("A5").Select
End
End If
Next j
Next i
Sheets("2004").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("A5").Select
End Sub

Wäre dankbar für jede Hilfe und jeden Tip!!!
Danke im Voraus
Thomas

Anzeige
AW: Vergleich Variable mit Zellinhalt
28.07.2003 10:01:04
ThomasJ
Nun gut, eigentlich wollte ich hier niemanden mit meinem Newbie-Zeugs belästigen, aber jetzt erklär ich mal kurz was ich machen will.
Habe ein Sheet mit TelNr, Rechnungsbetrag, Zeitraum, etc.
Der Zeitraum ist im Format MMM JJ
Es befinden sich mehrere Schaltflächen (über Formular eingefügt) und mehrere Makros (über Makrorekorder aufgenommen)
Habe mehrere andere Sheets: 2002 - 2005
Makro 2002 (Schaltfläche 2002) z.B. soll nun alle Angaben (TelNr, Rechnungsbetrag, Zeitraum) des Geschäftsjahres 2002 (Apr 02 - Mrz 03) in den Sheet 2002 übertragen.
Ausserdem sollen die Arbeitsblätter geschützt sein und bleiben.
Hier nun der "code" (wenn man ihn so nennen kann):

Sub Blatt2004()
' Blatt2004 Makro
' Makro am 24.07.2003 von Anwender aufgezeichnet
Dim i, j
Dim Zellen
Sheets("2004").Select
ActiveSheet.Unprotect
Range("a5:d999").Clear
Sheets("Rechnungen").Select
ActiveSheet.Unprotect
For i = 38078 To 38442
For j = 5 To 999
If i = Cells(j, 4) Then
Range("a3:a4").AutoFilter Field:=4, Criteria1:=">=38078", Operator:=xlAnd, _
Criteria2:="<38443"
Range("a5:d999").Copy
Sheets("2004").Select
Range("A5").Select
ActiveSheet.Paste
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Sheets("Rechnungen").Select
Selection.AutoFilter
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("A5").Select
Sheets("2004").Select
Range("A5").Select
End
End If
Next j
Next i
Sheets("2004").Select
ActiveSheet.Protect DrawingObjects:=True, Contents:=True, Scenarios:=True
Range("A5").Select
End Sub

Wäre dankbar für jede Hilfe und jeden Tip!!!
Danke im Voraus
Thomas

Anzeige
AW: Vergleich Variable mit Zellinhalt
28.07.2003 11:34:32
Guenter aus Do
Hallo Thomas
versuch folgenden Code mal :

Sub test()
Dim Zeile As Integer
Dim zeile2 As Integer
Let zeile2 = 5
For Zeile = 5 To 999
If Cells(Zeile, 4) >= 38078 And Cells(Zeile, 4) <= 38442 Then
Let Worksheets("2004").Cells(zeile2, 1) = Worksheets("Rechnungen").Cells(Zeile, 4)
Let Worksheets("2004").Cells(zeile2, 2) = Worksheets("Rechnungen").Cells(Zeile, 5)
Let Worksheets("2004").Cells(zeile2, 3) = Worksheets("Rechnungen").Cells(Zeile, 6)
Let Worksheets("2004").Cells(zeile2, 4) = Worksheets("Rechnungen").Cells(Zeile, 7)
Let zeile2 = zeile2 + 1
End If
Next Zeile
End Sub

gruß Guenter aus Do

Anzeige
AW: Vergleich Variable mit Zellinhalt
28.07.2003 13:04:46
ThomasJ
Nochmal Danke, Günter!!!
Es funktioniert.
Den Schutz hab ich so übernommen wie ich ihn hatte, sonst geht es nicht.
Hab den code verstanden.
Wieso aber die Variablen als Integer definieren und wieso let??? Ist das notwendig???
Die Berechnung ist weiterhin sehr lang, deshalb hab ich mir überlegt, ob es nicht möglich ist den Zeitraum von 365 Tagen auf 12 Tage zu begrenzen da ich das Datum als MMM JJ eingebe, was bedeutet 01.MM.JJ. Er müsste dann also jeweils nur den ersten Tag jeden Monats vergleichen. Mit OR scheint es nicht zu gehen.
Ausserdem habe ich den Zeilenwert "999" nur gewählt, um genügend Spielraum zu haben. Im Moment habe ich dort erst ca. 330 Datensätze. Wäre es nicht möglich so etwas zu definieren: for Zeile = 5 to "erste leere Zeile" ???
Thomas

Anzeige
AW: Vergleich Variable mit Zellinhalt
28.07.2003 13:04:52
ThomasJ
Nochmal Danke, Günter!!!
Es funktioniert.
Den Schutz hab ich so übernommen wie ich ihn hatte, sonst geht es nicht.
Hab den code verstanden.
Wieso aber die Variablen als Integer definieren und wieso let??? Ist das notwendig???
Die Berechnung ist weiterhin sehr lang, deshalb hab ich mir überlegt, ob es nicht möglich ist den Zeitraum von 365 Tagen auf 12 Tage zu begrenzen da ich das Datum als MMM JJ eingebe, was bedeutet 01.MM.JJ. Er müsste dann also jeweils nur den ersten Tag jeden Monats vergleichen. Mit OR scheint es nicht zu gehen.
Ausserdem habe ich den Zeilenwert "999" nur gewählt, um genügend Spielraum zu haben. Im Moment habe ich dort erst ca. 330 Datensätze. Wäre es nicht möglich so etwas zu definieren: for Zeile = 5 to "erste leere Zeile" ???
Thomas

Anzeige
AW: Vergleich Variable mit Zellinhalt
28.07.2003 14:16:24
Hallo Thomas
ich habe gelernt, das man Variable vereinbart.
Mit dem "let zeile2 = 5" gebe ich an, ab welcher Zeile im Ausgabesheed geschrieben werden soll.

Die Verringerung des Datums hat keine Auswirkung auf das Programm.
Wenn die Spalte 4 in der Ausgangsdatei(Rechnungen) keine Leerzeilen beinhaltet, ist folgender Code besser :

Sub test()
Dim Zeile As Integer
Dim zeile2 As Integer
let zeile = 5
Let zeile2 = 5
Do while Worksheets("Rechnungen").Cells(Zeile, 4) <> leer
If Cells(Zeile, 4) >= 38078 And Cells(Zeile, 4) <= 38442 Then
Let Worksheets("2004").Cells(zeile2, 1) = Worksheets("Rechnungen").Cells(Zeile, 4)
Let Worksheets("2004").Cells(zeile2, 2) = Worksheets("Rechnungen").Cells(Zeile, 5)
Let Worksheets("2004").Cells(zeile2, 3) = Worksheets("Rechnungen").Cells(Zeile, 6)
Let Worksheets("2004").Cells(zeile2, 4) = Worksheets("Rechnungen").Cells(Zeile, 7)
Let zeile2 = zeile2 + 1
End If
Zeile = zeile +1
loop
End Sub

So Thomas, das wars für heute ... ich mache nun Feierabend.
Ich hoffe du kannst mit der Lösung was Anfangen.
Günter aus Do

Anzeige
AW: Vergleich Variable mit Zellinhalt
29.07.2003 08:35:33
ThomasJ
Morgen Günter,
das von Gestern ist natürlich noch einfacher und ich lerne immer mehr dazu.
Trotzdem bin ich der Meinung, dass die Abfrage nach nur jeweils dem jeweils 1. des Monats die Berechnung beschleunigen müsste.
Nach Adam Riese (s.u.) 364*994 = ca. 360.000 Vergleiche
jetzt 364*330 = ca. 120.000 Vergleiche(1/3 der Zeit, oder)
nur nach dem 1. suchen 12*330 = ca. 4000 Vergleiche (viel, viel kürzer)
Geht das denn nicht?
Woran liegt es, dass es nicht schneller wird?
Gruß
Thomas

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige