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

Einpassung von Sortieren in ein bestehendes Makro

Einpassung von Sortieren in ein bestehendes Makro
21.08.2023 16:20:26
Low Exel
Hallo ich möchte die folgende Sortierfunktion für die Tabelle1 in das nachstehende Sub implementieren. Die Sortierung sollte aber vor Start der Zuordnung ablaufen. Ich benötige diese in einem Sub, weil dieses über einen Button ausgelöst wird.

Danke Euch
Mikka



Sub EineEbeneSortieren()
Worksheets("Tabelle1").Sort.SortFields.Clear
Range("B6:R260").Sort Key1:=Range("E6"), Header:=xlAscending
End Sub


Soll zu Beginn in das folgende Sub eingebaut werden.



Sub TabelleImportieren()

' Collection Worksheets Kosten
Dim c As New Collection
c.Add costarea11, "11"
c.Add costarea12, "12"
c.Add costarea21, "21"
c.Add costarea22, "22"
c.Add costarea31, "31"
c.Add costarea32, "32"
c.Add costarea41, "41"
c.Add costarea42, "42"

' Laufvariable Löschen
Dim s As Long

'Startzeile und Spaltenbereich zu loeschen
Dim startzeile As Long
Dim startspalte As Long
Dim endspalte As Long

startzeile = 10
startspalte = 2
endspalte = 11

'Loop Durch WorksheetCollection
For s = 1 To c.Count
With c(s)
.Range(.Cells(startzeile, startspalte), .Cells(.Cells(startzeile, startspalte).End(xlDown).Row, endspalte)).ClearContents
End With
Next s

'Durchlaufen der InhaltsTabelle und Kopieren der Zeilen
'Parameter Startzeile und Spalte der Daten in der Inhaltstabelle (oben links)
Dim startzeile As Long
Dim startspalte As Long
startzeile = 6
startspalte = 2

'Parameter rechteste Spalte
Dim endspalte As Long
endspalte = 18

'Mapping der Spalten der Inhaltstabelle (index) zu der jeweiligen Spalte in der Tabelle des Gebiets
Dim spaltenmap(1 To 18) As Long
spaltenmap(1) = 0
spaltenmap(2) = 0
spaltenmap(3) = 0
spaltenmap(4) = 7
spaltenmap(5) = 2
spaltenmap(6) = 0
spaltenmap(7) = 3
spaltenmap(8) = 4
spaltenmap(9) = 5
spaltenmap(10) = 8
spaltenmap(11) = 6
spaltenmap(12) = 0
spaltenmap(13) = 9
spaltenmap(14) = 0
spaltenmap(15) = 10
spaltenmap(16) = 0
spaltenmap(17) = 0
spaltenmap(18) = 11

'Spalte mit ID/Areacode
Dim idspalte As Long
idspalte = 2

'Laufvariable zum Durchlaufen der Inhaltstabelle
'Var Zeile
Dim vz As Long

'Var Spalte
Dim vs As Long

'Variable zum Speichern der letzten 2 Ziffern des ID-Keys
Dim akey As String

'Variable zum Speichern der Targetrow auf der zu beschreibenden Gebietsseite
Dim targetrow As Long

'Workaround: Collection zum Übersetzen der Gebietsnummer zum Index des Arrays zum Speichern der genutzten Zeilennummer pro Gebietsseite
Dim zunutzendezeilemap As New Collection
zunutzendezeilemap.Add 1, "11"
zunutzendezeilemap.Add 2, "12"
zunutzendezeilemap.Add 3, "21"
zunutzendezeilemap.Add 4, "22"
zunutzendezeilemap.Add 5, "31"
zunutzendezeilemap.Add 6, "32"
zunutzendezeilemap.Add 7, "41"
zunutzendezeilemap.Add 8, "42"

Dim zunutzendezeile(1 To 8) As Long
For j = 1 To 8
zunutzendezeile(j) = startzeile
Next j

'Schleife zum Durchlaufen der Zeilen der Inhaltstabelle, extrahieren der letzten zwei Ziffern des Gebietsnummernstrings
'Bestimmung der zu beschreibenden Zeile in der Gebietstabelle, Durchlaufen der Spalten und Kopieren des Werts, falls Spalte gemapped (>0)
For vz = startzeile To table.Cells(startzeile, startspalte).End(xlDown).Row
akey = Right(table.Cells(vz, idspalte).Value, 2)
targetrow = zunutzendezeile(zunutzendezeilemap(akey))
zunutzendezeile(zunutzendezeilemap(akey)) = zunutzendezeile(zunutzendezeilemap(akey)) + 1
For vs = startspalte To endspalte
If spaltenmap(vs) > 0 Then
c(akey).Cells(targetrow, spaltenmap(vs)).Value = Inhaltstable.Cells(vz, vs).Value
End If
Next vs
Next vz

End Sub




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

Betreff
Datum
Anwender
Anzeige
AW: Einpassung von Sortieren in ein bestehendes Makro
21.08.2023 16:47:12
daniel
Hi
und was ist jetzt den Problem dabei?
bitte die Frage konkretisieren, und wenn möglich, eine Beispieldatei mit hochladen, an der man den Code testen kann.

ansonsten ist dein Codebeispiel ziemlich durcheinander
die erste Zeile stammt aus der Programmierung für die Sortierung, wie sie ab Excel 2007 verwendet werden kann,
die zweite Zeile ist eine Zeile, wie die Sortiertung bis 2003 programmiert wurde.
(ich persönlich wende immer noch die alte Variante an, weil sie genauso funktioniert, aber nur eine einzige Programmzeile benötigt)
Aber auch in dieser Zeile ist ein Fehler drin, da mischt du die Parameter mit den zugeordneten Werten:
bei Header:=... gibst du an, ob die erste Zeile mit sortiert werden soll (xlno) oder nicht, (xlyes), bzw ob Excel selber herausfinden soll, ob eine Überschrift vorhanden ist oder nicht (xlguess)
die Konstante xlAscending ist jedoch für den Parameter :Order1:=... vorgehsehen, da du angibst, ob auf- oder absteigend sortiert werden soll.
Normalerweise funktioniert der Code, wenn man das durcheinander wirft, weil hinter den Konstanten nur Zahlen stehen (1, 2, 3 usw) und es VBA nur auf die Zahl ankommt.

es reichrt also, diese Zeile an den Anfang deines Makros zu stellen, da es nur eine Zeile ist, würde ich dafür kein Untermarko erstellen:


Worksheets("Tabelle1").Range("B6:R260").Sort Key1:=Worksheets("Tabelle1").Range("E6"), Order1:=xlascending, Header:=xlguess

gruß Daniel

Anzeige
AW: Einpassung von Sortieren in ein bestehendes Makro
21.08.2023 17:20:32
Low Exel
Hallo

funktioniert wie von dir beschrieben bestens.

Dankeschön
Mikka

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige