Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1308to1312
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
Inhaltsverzeichnis

An Daniel bzw Bambi

An Daniel bzw Bambi
06.05.2013 23:58:04
Mustafa
Hallo Daniel,
da dein Beitrag leider schon im Archiv gelandet ist
https://www.herber.de/forum/archiv/1308to1312/t1311062.htm#1311062
antworte ich hier.
Probier mal folgenden Code für deine Umfangreiche Beispieltabelle:

Option Explicit
Sub Daniel()
Dim Wks1 As Worksheet, Wks2 As Worksheet, Wks3 As Worksheet
Dim Bereich1 As Variant, Bereich2 As Variant, Bereich3 As Variant
Dim LngLetzteZeile As Long
Dim LngCounter1 As Long, LngCounter2 As Long, LngErgebnis As Long
Dim Col As New Collection
Dim Anfangsdatum As Date, Enddatum As Date
If Left(Sheets(Sheets.Count).Name, 11) = "Reparaturen" Then Sheets(Sheets.Count).Delete
Worksheets("Reparaturen").Copy after:=Sheets(Sheets.Count)
Set Wks1 = ActiveSheet
Set Wks2 = Worksheets("Parameter")
Set Wks3 = Worksheets("Kosten")
Wks3.Range("A2").CurrentRegion.ClearContents
With Wks1
LngLetzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
Bereich1 = .Range(.Cells(2, 6), .Cells(LngLetzteZeile, 6)).Value
Bereich2 = .Range(.Cells(2, 2), .Cells(LngLetzteZeile, 2)).Value
Bereich3 = .Range(.Cells(2, 13), .Cells(LngLetzteZeile, 13)).Value
End With
Anfangsdatum = Wks2.Cells(5, 2)
Enddatum = Wks2.Cells(6, 2)
On Error Resume Next
For LngCounter1 = 1 To UBound(Bereich1)
Col.Add Bereich1(LngCounter1, 1), CStr(Bereich1(LngCounter1, 1))
Next
On Error GoTo 0
For LngCounter1 = 1 To Col.Count
For LngCounter2 = 1 To UBound(Bereich1)
If Bereich1(LngCounter2, 1) = Col(LngCounter1) Then
If Bereich2(LngCounter2, 1) >= Anfangsdatum And Bereich2(LngCounter2, 1) 

Hier werden sämtliche Berechnungen und Schleifen in den 3 Arrays durchgeführt, welches wesentlich schneller sein sollte als beim letzten Code den ich dir geschrieben hatte.
Rückmeldung obs Hilft wäre nett.
Gruß aus der Domstadt Köln.

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: An Daniel bzw Bambi
07.05.2013 21:25:11
Daniel
Hallo Mustafa,
vielen Dank für deine Arbeit. Es funktioniert nicht bei mir aber ich werde den Code analysieren sieht sehr schnell aus... Ich werde mich wieder melden.
Gruss
Daniel

AW: An Daniel bzw Bambi
07.05.2013 21:59:30
Daniel
Hallo Mustafa,
hab deinen Code näher angeschaut und getestet. Hmm zuletzt löschst du wks1 das müsste ja dann die Tabelle "Reparaturen" also das Herz des Files sein? Ich denk mal du hast den Code in einem File bei dir getestet könnest du mir das mal geben? Das sieht aber superinteresannt aus!!
Pröble weiter daran rum..
Gruss
Daniel

Hier die Datei
08.05.2013 00:36:27
Mustafa
Hallo Daniel,
hier mal die Datei in der der Code läuft:
https://www.herber.de/bbs/user/85234.xlsm
Ich lösche am ende des Codes Wks1, aber das ist nicht das Blatt Reparaturen.
Am Anfang des Codes erstelle ich eine Kopie des Blattes Reparaturen.

Worksheets("Reparaturen").Copy after:=Sheets(Sheets.Count)
Set Wks1 = ActiveSheet
Hier kopiere ich das Blatt Reparaturen und setze das Aktive neue Blatt als Wks1.
Gruß aus der Domstadt Köln.

Anzeige
AW: Hier die Datei
08.05.2013 18:48:12
Daniel
Hallo Mustafa,
du bist ne Granate!! Ich hatte nur meine Tabellenzellen nicht kompatibel formatiert. Hab noch ein paar kleine Anpassungen vorgenommen (Geräte ausserhalb des Datumbereichs sollen gar nicht angezeigt werden,Serienummer und MGB Nummer werden aufgelistet) jetzt sieht es so aus:
Function Auswertung()
Dim Wks1 As Worksheet, Wks2 As Worksheet, Wks3 As Worksheet
Dim Bereich1 As Variant, Bereich2 As Variant, Bereich3 As Variant, Bereich4 As Variant
Dim LngLetzteZeile As Long
Dim LngCounter1 As Long, LngCounter2 As Long, LngErgebnis As Long
Dim Col1 As New Collection, Col2 As New Collection
Dim Anfangsdatum As Date, Enddatum As Date
Set Wks1 = Worksheets("Reparaturen")
Set Wks2 = Worksheets("Parameter")
Set Wks3 = Worksheets("Kosten")
Wks3.Range("A2").CurrentRegion.ClearContents
Worksheets("Kosten").Cells(1, 1) = "MGB Nr."
Worksheets("Kosten").Cells(1, 2) = "Serie Nr."
Worksheets("Kosten").Cells(1, 3) = "Kosten"
With Wks1
LngLetzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
Bereich1 = .Range(.Cells(2, 5), .Cells(LngLetzteZeile, 5)).Value    'Serienummer
Bereich2 = .Range(.Cells(2, 11), .Cells(LngLetzteZeile, 11)).Value    'Eingangsdatum RCS
Bereich3 = .Range(.Cells(2, 13), .Cells(LngLetzteZeile, 13)).Value  'Kosten
Bereich4 = .Range(.Cells(2, 6), .Cells(LngLetzteZeile, 6)).Value    'MGB Nummer
End With
Anfangsdatum = Wks2.Cells(5, 2)
Enddatum = Wks2.Cells(6, 2)
On Error Resume Next
For LngCounter1 = 1 To UBound(Bereich1)
If Bereich2(LngCounter1, 1) >= Anfangsdatum And Bereich2(LngCounter1, 1) = Anfangsdatum And Bereich2(LngCounter2, 1) 
Vielen Dank für deine Hilfe Gratuliere kompakt und schnell dein Code :-)
Gruss aus den hohen Alpen
Daniel

Anzeige
AW: Hier die Datei
08.05.2013 19:48:19
Daniel
Hallo Mustafa,
du bist ne Granate!! Ich hatte nur meine Tabellenzellen nicht kompatibel formatiert. Hab noch ein paar kleine Anpassungen vorgenommen (Geräte ausserhalb des Datumbereichs sollen gar nicht angezeigt werden,Serienummer und MGB Nummer werden aufgelistet) jetzt sieht es so aus:
Function Auswertung()
Dim Wks1 As Worksheet, Wks2 As Worksheet, Wks3 As Worksheet
Dim Bereich1 As Variant, Bereich2 As Variant, Bereich3 As Variant, Bereich4 As Variant
Dim LngLetzteZeile As Long
Dim LngCounter1 As Long, LngCounter2 As Long, LngErgebnis As Long
Dim Col1 As New Collection, Col2 As New Collection
Dim Anfangsdatum As Date, Enddatum As Date
Set Wks1 = Worksheets("Reparaturen")
Set Wks2 = Worksheets("Parameter")
Set Wks3 = Worksheets("Kosten")
Wks3.Range("A2").CurrentRegion.ClearContents
Worksheets("Kosten").Cells(1, 1) = "MGB Nr."
Worksheets("Kosten").Cells(1, 2) = "Serie Nr."
Worksheets("Kosten").Cells(1, 3) = "Kosten"
With Wks1
LngLetzteZeile = .Cells(.Rows.Count, 1).End(xlUp).Row
Bereich1 = .Range(.Cells(2, 5), .Cells(LngLetzteZeile, 5)).Value    'Serienummer
Bereich2 = .Range(.Cells(2, 11), .Cells(LngLetzteZeile, 11)).Value    'Eingangsdatum RCS
Bereich3 = .Range(.Cells(2, 13), .Cells(LngLetzteZeile, 13)).Value  'Kosten
Bereich4 = .Range(.Cells(2, 6), .Cells(LngLetzteZeile, 6)).Value    'MGB Nummer
End With
Anfangsdatum = Wks2.Cells(5, 2)
Enddatum = Wks2.Cells(6, 2)
On Error Resume Next
For LngCounter1 = 1 To UBound(Bereich1)
If Bereich2(LngCounter1, 1) >= Anfangsdatum And Bereich2(LngCounter1, 1) = Anfangsdatum And Bereich2(LngCounter2, 1) 
Vielen Dank für deine Hilfe Gratuliere kompakt und schnell dein Code :-)
Gruss aus den hohen Alpen
Daniel

Anzeige
Danke für die Rückmeldung orT
09.05.2013 00:03:32
Mustafa
Gruß aus der Domstadt Köln.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige