Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1660to1664
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

Umstellen einer langen Abfrage in Array

Umstellen einer langen Abfrage in Array
12.12.2018 06:33:39
Daniel
Hallo,
ich habe mir eine "Mammutabfrage" gebaut, um Daten von einem Arbeitsblatt in andere Blätter zu übertragen.
Hier wird immer wieder ein Filter gesetzt, Daten übertragen, nächster Filter usw.
Das Makro ist wahnsinnig lang und ich würde es gerne verschlanken, habe aber von Arrays absolut keine Ahnung.
Es wäre schön, wenn mir hier jemand einen Denkanstoss geben kann und ein bisschen auf die Sprünge hilft.
Hier ein Codeauszug aus meinem aktuellen Makro

Sheets("AWM").Select
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=5, _
Criteria1:="Kriterium1"
Application.CutCopyMode = False
Selection.Copy
Sheets("Blatt7").Select
Range("D8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Sheets("AWM").Select
ActiveSheet.ListObjects(1).Range.AutoFilter Field:=5, _
Criteria1:="Kriterum2"
Application.CutCopyMode = False
Selection.Copy
Sheets("Blatt7").Select
Range("C8").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

Die Kriterien und die Blätter wechseln, da aus über 5000 Datensätzen auf etwa 40 Blätter verteilt wird.
Ich brauche wirklich nur einen Denkanstoss damit ich mir das Array zusammenbauen kann, falls das überhaupt geht (?)

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Umstellen einer langen Abfrage in Array
12.12.2018 08:03:11
Daniel
Hi
das geht auch einfach ohne Array.
1. sortiere die Liste nach der Kriteriumsspalte, so dass alle Zeilen, die auf ein Blatt gehören, direkt bei einander stehen
2. nimm den ersten Wert aus der Kriteriumsspalte (Zeile2) und suche nach dessen letzen Vorkommen (geht mit .Find und Searchdirection:=xlprevious)
3. kopiere dann den Bereich, der zwischen diesen beiden Zellen liegt in ein neues Blatt
4. nimm als nächsten Wert die Zelle, die der letzen Zelle direkt folgt und wiederhole Schritt 2 und 3 solange, bis du alle Werte kopiert hast.
auf diese weise "hangelst" du dich durch deine Liste, ohne dass du vorab die Kriterien in einem Array oder ähnlichem ermitteln musst.
sieht als Code so aus:
Sub test()
Dim Zelle1 As Range
Dim Zelle2 As Range
With ActiveSheet.ListObjects(1).Range
.Sort Key1:=.Cells(1, 5), order1:=xlAscending, Header:=xlYes
Set Zelle2 = .Cells(1, 5)
Do While Zelle2.Offset(1, 0)  ""
Set Zelle1 = Zelle2.Offset(1, 0)
Set Zelle2 = Zelle1.EntireColumn.Find(what:=Zelle1.Value, _
lookat:=xlWhole, _
searchdirection:=xlPrevious)
Sheets.Add after:=Sheets(Sheets.Count)
.Rows(1).Copy ActiveSheet.Cells(1, 1)
Intersect(Range(Zelle1, Zelle2).EntireRow, .Cells).Copy ActiveSheet.Cells(2, 1)
ActiveSheet.Name = Zelle1.Value
Loop
End With
End Sub
Gruß Daniel
Anzeige
AW: Umstellen einer langen Abfrage in Array
12.12.2018 10:58:17
Daniel
Ja, warum einfach, wenns auch umständlich geht.
Vielen Dank schonmal für Deine Hilfe.
Werde mir das entsprechend zusammenbauen, damit auch die Nachwelt noch durchblickt. Mein derzeitiges Makro hat beinahe 2000 Zeilen Code :-)

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige