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

Werte geordnet zusammenfassen im Tabellenblatt

Werte geordnet zusammenfassen im Tabellenblatt
20.04.2016 18:45:05
Markus
Liebes Forum,
Wie müsste ich den folgenden Code anpassen, wenn ich die Zuordnung der Werte nur in einem Tabellenblatt durchführen will. Die Zuordnung findet im Ausgangstabellenblatt (Tabelle 1) statt und ersetzt den alten Ausgangszustand; also ID, Projekt und Name sollen weiterhin nur in den Spalten A-C stehen und darunter die nun richtig sortieren Werte.
Der Code stammt von "Piet" (hier aus dem Forum, danke nochmal) und funktioniert einwandfrei. Damals waren es 3 Tabellenblätter, welche im 4.Tabellenblatt zusammengefasst werden.
Option Explicit
Dim Tab4 As Object, ZAdr As String
Dim Edr As String, SEdr As String
Dim zr As Long, lz As Long, z As Long
Dim a As Long, n As Long, j As Long

Sub Werte_kopieren_zusammenfassen()
Set Tab4 = Worksheets("Tabelle4")
zr = Tab4.Cells.Rows.Count
'alte Tabelle komplett löchen  (Delete)
Tab4.Range("A2:B" & zr).Delete Shift:=xlUp
'Tabelle 1-3 Spalte A-B kopieren
For j = 1 To 3
ZAdr = Tab4.Cells(zr, 1).End(xlUp).Address
With Worksheets("Tabelle" & j)
lz = .Range("A1").End(xlDown).Row
.Range("A2:B" & lz).Copy
Tab4.Range(ZAdr).Offset(1, 0).PasteSpecial xlPasteAll
End With
Next j
Application.CutCopyMode = False
'Tzabelle 4 Spalte A alle zentrieren
Edr = Tab4.Cells(zr, 1).End(xlUp).Address
Tab4.Range("A2", Edr).HorizontalAlignment = xlCenter
'Tzabelle 4 Spalte A + B sortieren
SEdr = Tab4.Cells(zr, 2).End(xlUp).Address
Tab4.Range("A2", SEdr).Sort Key1:=Range("A2"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal
'letzte Zelle in Tabelle4 suchen
lz = Tab4.Cells(zr, 1).End(xlUp).Row
z = 2  '1. Zeile zum zusammenfassen
'Do Schleife zum zusammenfassen
Do Until z = lz + 1
a = z:  n = 1   'Bereich ermitteln
If Cells(z, 1) = Cells(z + 1, 1) Then
For j = z To lz
If Cells(j, 1) = Cells(j + 1, 1) Then _
n = n + 1: z = z + 1 Else Exit For
Next j
End If
'Zellen in Spalte A verbinden
If n > 1 Then
Cells(a + 1, 1).Resize(n - 1, 1) = Empty
With Cells(a, 1).Resize(n, 1)
.VerticalAlignment = xlCenter
.MergeCells = True
End With
End If
'letzte Zelle unterstreichen
With Cells(z, 1).Resize(1, 2).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
'naechste Zelle setzen
z = z + 1
Loop
End Sub

hier das Beispiel:
https://www.herber.de/bbs/user/105122.xlsx
Vielen Dank.

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mit Rekorder
20.04.2016 19:48:57
Fennek
Hallo,
in meinem Test kam dieser Code mit der Demo-Datei zurecht:

Sub sFen()
Range("A1").currentregion.advancedfilter action:=xlfiltercopy, _
Copytorange:=range("F1"), unique:=true
Range("F1").currentregion.sort key1:=range("F2"), order1:=xlascending, key2:=range("G2"), _
Order2:=xlascending, key3:=range("H2"), order3:=xlascending, header:=xlguess,  _
ordercustom:=1, _
Matchcase:=false, orientation:=xltoptobottom, dataoption1:=xlsortnormal, dateoption2:= _
xlsortnormal, _
Dataoption3:=xlsortnormal
End sub
Mfg

AW: mit Rekorder
20.04.2016 22:48:09
Markus
Hallo Fennek,
danke für deine Mühe, aber funktioniert leider nicht.
Mein Anliege wäre es auch, dass die "alten" unsortierten Werte durch die neuen ersetzt werden.
Danke

Anzeige
AW: mit Rekorder
21.04.2016 09:17:22
Fennek
Hallo,
Zum Verständnis:
Der Code ist an einem minimalen 'Nachbau' getestet und dann von Hand vom pc in ein Tablet übertragen worden.
Das bedeutet:
Du müsstest zuerst nach Tippfehlern suchen
Dann den Code im Einzelschrittmodus f8 ausführen und die Zeile des Abbruchs einschließlich der Inhalte der angesprochenen Variablen berichten.
Mfg
Ps warum möchtest du vba, wenn die Aufgabe auch mit wenigen Klicks im Menü gelöst werden kann?

AW: Lösung - offen gestellt
22.04.2016 16:43:13
Piet
Hallo Markus,
ich freue mich sehr das mein Code zum Einsatz gekommen ist. Das ehrt mich.
Anbei eine geaenderte Version damit jede Tabelle einzeln sortiert werden kann.
Die For Next k Schleife dient dazu alle Tabellen einzeln zusammenzufassen.
Ich hoffe ich konnte dir auch diesmal hlefen. Würde mich sehr freuen
herzliche Grüsse von Piet

Option Explicit         '22.4.015  Piet für Hewber Forum
'umgeschrieben auf Einzel-Tabelle und gesamte Auswertung
Dim Edr As String, SEdr As String
Dim zr As Long, lz As Long, z As Long
'Werte in allen Tabelle zusammenfassen
Sub Alle_Tabellen_zusammenfassen()
Dim Blatt As String, k As Integer
Blatt = ActiveSheet.Name
'Schleife für alle Tabellen
For k = 1 To Worksheets.Count
Worksheets(k).Select
Werte_inTabelle_zusammenfassen
Next k   'zurück in altes Blatt
Worksheets(Blatt).Select
End Sub
'Werte in einer Tabelle zusammenfassen
Sub Werte_inTabelle_zusammenfassen()
Dim a As Long, n As Long
zr = Cells.Rows.Count:  z = 2
'alte Tabelle komplett löchen  (Delete)
Range("F2:H" & zr).Delete Shift:=xlUp
lz = Range("A1").End(xlDown).Row
Range("A2:C" & lz).Copy Range("F2")
Application.CutCopyMode = False
'Tzabelle 4 Spalte A alle zentrieren
Edr = Cells(zr, 6).End(xlUp).Address
Range("F2", Edr).HorizontalAlignment = xlCenter
'Tzabelle 4 Spalte A + B sortieren
SEdr = Cells(zr, "H").End(xlUp).Address
Range("F2", SEdr).Sort Key1:=Range("F2"), Order1:=xlAscending, _
Header:=xlNo, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal
'Do Schleife zum zusammenfassen
Do Until z = lz + 1
a = z:  n = 1   'Bereich ermitteln
If Cells(z, 6) = Cells(z + 1, 6) Then
For j = z To lz
If Cells(j, 6) = Cells(j + 1, 6) Then _
n = n + 1: z = z + 1 Else Exit For
Next j
End If
'Zellen in Spalte A verbinden
If n > 1 Then
Cells(a + 1, 6).Resize(n - 1, 1) = Empty
With Cells(a, 6).Resize(n, 1)
.VerticalAlignment = xlCenter
.MergeCells = True
End With
End If
'letzte Zelle unterstreichen
With Cells(z, 6).Resize(1, 3).Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
'naechste Zelle setzen
z = z + 1
Loop
End Sub

Anzeige
AW: Lösung - offen gestellt
24.04.2016 14:39:44
Markus
Hallo Piet,
funktioniert einwandfrei ... musste oben nur noch ein "j As Long" ergänzen. Ansonsten super.
Da ich momentan viel mit VBA herumspiele, habe ich noch eine Frage an dich.
Kann man so eine Zuordnung auch über mehrere Spalten vornehmen (siehe angehängte Beispieldatei)?
https://www.herber.de/bbs/user/105188.xlsx
Vielen Dank für deinen Einsatz und Mühe.

AW: 2. Lösung - offen gestellt
24.04.2016 18:57:21
Piet
Hi Markus,
ich habe jetzt erst gesehen das du noch eine Frage hattest.
Anbei eine neue Beispieldatei mit zwei Lösungen bezüglich Umsatz.
Die Daten kopiere ich wieder von Tabelle1 in Tabelle2.
Im Modul3 (Sortier_mod) ist ein eigenes Sortier Makro.
Ich habe es extra separat gestellt wegen der Sortier Rangfolge.
Wenn die nicht richtig ist musst du die Adressen selbst aendern.
Würde mich freuen wenn ich dir noch einmal helfen konnte.
mfg Piet
https://www.herber.de/bbs/user/105193.xls

Anzeige
AW: 2. Lösung - offen gestellt
24.04.2016 21:15:03
Markus
Hallo Piet,
Überragend!! Danke nochmal für deine Hilfe.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige