Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1280to1284
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

Sortierung mit variablem Bereich plus ..

Sortierung mit variablem Bereich plus ..
15.10.2012 20:24:10
Norbert
Hallo VBA ler,
Ich möchte gerne verschiedene Bearbeitungsroutinen in einer Prozedur ablaufen lassen.
Das Tabellenblatt "Zusammenfassung" beinhaltet einen Standardbereich von 10 Tabellenblättern deren Informationen zusammengeführt werden. Danach muss je nach vorangegangener Erfassung verschiedene Anpassungen vorgenommen werden.
1.) Bei mehr als 10 Tabellenblättern muss der Bereich erweitert werden. Die Tabellenblätter können an unterschiedlichen Stellen stehen. Deshalb gibt es ein
Tabellenblatt mit allen Tabellennamen. Vorhandene Berechnungen werden hierbei über
Indirektformeln mit Umschlüsselung über die Zeilennummer ermittelt. Bei mehr als 10
Tabellen muss der Bereich erweitert werden --> Makro Anzahl
2.) Danach soll der Bereich sortiert werden. Danke an die Hilfe von Sheldon und Justin (Beitrag vom 19.09). Ich war leider vier Wochen verhindert. Wusste nicht das der Beitrag nach ca. fünf Tagen geschlossen wird. Ich hoffe Ihr bekommt den Dank über diesen Weg mit. Sortierung funktioniert. Vielen Dank für Eure Hilfe.
3.) Nach der Sortierung wird der Bereich wegen verbundener Zellen neu formatiert.
Dies erfolgt im Makro Formatierung.
Nun die Probleme bzw. offenen Fragen.
A.) Die Routine soll über einen Button gestartet werden. Dies geschieht immer im zu bearbeitendem Tabellenblatt. In Ausnahmefällen kann dies aber einen anderen Namen als Zusammenfassung haben. Müssen in den einzelnen Makros noch Deklarationen vorgenommen werden und wie kann ich den Aufruf über einen variablen Tabellenblattnamen in allen Unterprozeduren ausführen.
B.) Das Einfügen des zusätzlichen Bereichs erfolgt über das Makro Anzahl. Damit der Bildschirm nicht immer aktualisiert wird habe ich vor langer Zeit in einem Makro
ActiveWindow.WindowState = xlMinimized und ActiveWindow.WindowState = xlMaximized
verwendet. Ist dies noch gebräuchlich?
C.) Nachdem eventuelle zusätzliche Bereiche eingefügt worden sind, verändert sich das Tabellenende. Der Bereich A48 bis BG(Tabellenende - aktuell noch BG336) soll sortiert werden. Wie kann ich in den Makros den Sortbereich und die vier Sortierkriterienbereiche variabel anpassen. Dies gilt dann auch für das nachfolgende
Makro Formatierung.
D.) noch offen - In dem variablen Bereich sollen danach die Zeilen 48 Bis Tabellenende gelöscht werden, wenn in der Zelle AR der entsprechenden Zeile nichts steht. Die Zelle wurde vorher über eine Formel mit "" gefüllt. Vor dem Sortieren werden die Formeln in Werte umgewandelt.
E.) Am Schluß möchte ich noch verschiedene Bereiche im oberen Tabellenbereich ausblenden. Zum Beispiel soll nach folgendem Muster der Bereich BH3:BH12 abgefragt werden. Die Zellen BH bis BL sind verbunden. Der Zelleninhalte beinhaltet einen Wert oder "". Wenn der komplette Bereich "" enthält sollen die Zeilen 3 bis 12 ausgeblendent werden.
Sorry für die evtl. zu detailliert dargestellte Aufgabe.
Über Hilfe würde ich mich trotzdem freuen.
Als blutiger VBA-Anfänger bin ich auch für Infos im formalem Aufbau von Makros dankbar.
Nachfolgend die bereits vorhandenen Makros.

Sub MkoZusammenfassung()
' Aufruf der einzelnen Unterprozeduren
ActiveWindow.WindowState = xlMinimized
Application.Run Macro:="MkoAnzahl"
Application.Run Macro:="MkoSortierung"
Application.Run Macro:="MkoFormatierung"
ActiveWindow.WindowState = xlMaximized
End Sub

Sub MkoAnzahl()
'
' Erweiterung des Standardbereiches(A48:BG336 = 10 Tabellenblätter)
' wenn die Anzahl Auslegungen in Zelle BH44 > 0
'
Dim i As Integer
i = Worksheets("Zusammenfassung").Range("BH44").Value
While i > 0
Range("A76:BL104").Select
Selection.Copy
Range("A76:M76").Select
Selection.Insert Shift:=xlDown
ActiveWindow.SmallScroll Down:=-16
i = i - 1
Wend
End Sub

Sub MkoSortierung()
'
' Zusammenfassung der Tabellenblätter - Sortierung nach Typ/Länge/Breite/Pos.Nr.
'
ActiveCell.SpecialCells(xlLastCell).Select
Range("A48:BG336").Select
Range("BD336").Activate
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Selection.UnMerge
ActiveWorkbook.Worksheets("Zusammenfassung").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Zusammenfassung").Sort.SortFields.Add Key:= _
Range("AR48:AR336"), SortOn:=xlSortOnValues, Order:=xlAscending, _
CustomOrder:= _
"A; B; 100; C; D; 170" _
, DataOption:=xlSortTextAsNumbers
ActiveWorkbook.Worksheets("Zusammenfassung").Sort.SortFields.Add Key:= _
Range("AB48:AB336"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Zusammenfassung").Sort.SortFields.Add Key:= _
Range("AH48:AH336"), SortOn:=xlSortOnValues, Order:=xlAscending, _
DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("Zusammenfassung").Sort.SortFields.Add Key:= _
Range("R48:R336"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortTextAsNumbers
With ActiveWorkbook.Worksheets("Zusammenfassung").Sort
.SetRange Range("A48:BG336")
.Header = xlGuess
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub

Sub MkoFormatierung()
'
' Übertragung der Original Formatierung (Bereich A42:BG42)
' auf die zusammengefassten Informationen
'
Range("A42:BG42").Select
Selection.Copy
Range("A48:BG336").Select
Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End Sub

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Sortierung mit variablem Bereich plus ..
15.10.2012 23:18:05
fcs
Hallo Norbert,
Sorry für die evtl. zu detailliert dargestellte Aufgabe.
detailliert Darstellen ist nicht verkehrt. Das Problem ist eher der Umfang. Eine Beispieldatei mit Testdaten wäre auch hilfreich gewesen.
A.) Die Routine soll über einen Button gestartet werden. ... In Ausnahmefällen kann dies aber einen anderen Namen als Zusammenfassung haben.
Hier deklarierst du am besten eine Modulweite Objektvariable vom Typ Worksheet.
In der Hauptprozedur wird dieser dann das Objekt per Set zugewiesen - hier ActiveSheet. Diese Objektvariable kannst du dann in allen Prozeduren verwenden. Du könntest natürlich auch in jeder Subroutine mit Activesheet arbeiten statt Activeworkbook.Worksheets("Zusammenfassung").
Als Schaltfläche verwendest die Schaltfläche aus den Formular-Steuerelementen und weist dieser das Makro zu.
B.)Ist dies noch gebräuchlich?
Nein: Application.ScreenUpdating = False bzw. True
C.) Für die Ermittlung der Letzen Zeile mit Daten gibt es verschiedene Methoden. 2 sind beispielhaft im Code.
Diesen Wert weist man einer Variablen zu und kann dann die Bereiche variabel festlegen.
D.) In einer Schleife Zellen auf "" prüfen und Inhalte löschen. Dann für alle Leeren die Zeilen in einer Anweisung löschen.
E.) In For-Next-Schleifen die Werte in der Betreffenden Zellen zeilenweise abarbeiten und ausblenden.
Gruß
Franz
Textdatei mit angepasstem/ergänztem Code: https://www.herber.de/bbs/user/82137.txt

Anzeige
AW: Sortierung mit variablem Bereich plus ..
16.10.2012 16:49:14
Norbert
Hallo fcs,
vielen Dank für Deine schnelle Hilfe. In zwei Bereichen laufen die Prozeduren noch nicht korrekt.
Beim "leere löschen" erfolgt die Meldung: Kann Teil einer verbundenen Zelle nicht ändern. Nach der Formatierung ist die Zelle AR verbunden bis AX. Scheinbar funktioniert das löschen mit verbunden Zellen nicht. Ich habe die Abläufe testweise gedreht. Formatierung nach dem Zellen löschen. Die Formatierung läuft bis Ende und formatiert die gelöschten Zeilen erneut. Auch das Ausblenden funktioniert nicht. Liegt evtl. am gleichen Problem. Die Zelle BH ist bis BL verbunden. In den Zellen steht eine Formel die für das Ergebnis leer sorgt. Vielleicht wird die Zelle durch die Formel als nicht leer erkannt.
Gruß Norbert

Anzeige
AW: Sortierung mit variablem Bereich plus ..
17.10.2012 07:33:06
fcs
Hallo Norbert,
die Reihenfolge erst leere Löschen dann Formatieren ist dann korrekt.
Im Formatier-Makro muss dann die letzte Zeile erst neu berechent werden.
Warum das Ausblenden in den Kopfzeilen nicht funktioniert kann ich nicht sagen. Ich hatte bei mir verbundene Zellen eingebaut.
Dazu benötige ich mal eine Beispieldatei (vertrauliche Daten ggf. anonymisieren).
Gruß
Franz
Private Sub MkoFormatierung()
' Übertragung der Original Formatierung (Bereich A42:BG42)
' auf die zusammengefassten Informationen
Const Spalte = 44 'Spalte AR - zu prüfende Spalte
With wksZus
Zeile_L = .Cells(.Rows.Count, Spalte).End(xlUp).Row
.Range("A42:BG42").Copy
.Range("A48:BG" & Zeile_L).PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
End With
End Sub

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige