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

Tabelle Zusammenfassen dynamisch

Tabelle Zusammenfassen dynamisch
11.06.2015 22:27:16
Eda
Hallo :)
Ich bin gerade dabei ein Makro zu erstellen für die Zusammenfassung einer Tabelle. Der Code (Vielen Dank an Sepp) funktioniert ziemlich gut; nur leider ist sie nicht wirklich dynamisch. Zurzeit geht sie leider immer nur fix die Spalte F durch und addiert bei einem doppeltem Eintrag in Spalte E in der gleichen Zeile die Werte.
Nun hab ich das Problem dass "Text" und "Wert" nicht immer in Spalte F und G sind. Es könnten Tabellen geben in denen sie in einer anderen Spalte stehen. Deswegen muss ich den Code so verändern, dass er erstmal herausfindet in welcher Spalte sich "Text" und "Wert" befindet und dementsprechend vorangeht und genau da hab ich Probleme.
Im Anhang ist nochmal eine Beispieldatei mit entsprechendem Makro für die Zusammenfassung.
Würde mich über Hilfe sehr freuen :)
https://www.herber.de/bbs/user/98154.xlsm
gleich mit Makro :)
Code:
Option Explicit

Sub summary()
Dim rng As Range, rngC As Range
Dim lngCol As Long
On Error Resume Next
Application.ScreenUpdating = False
With ActiveSheet
Set rng = .ListObjects(1).Range
If rng Is Nothing Then Exit Sub
.Copy after:=ActiveSheet
End With
With ActiveSheet
.Name = rng.Parent.Name & " Summary"
If .AutoFilterMode Then .ShowAllData
.Range(.Cells(1, 7), .Cells(1, 8)) = "XXX"
.Range(.Cells(2, 7), .Cells(rng.Rows.Count - 1, 7)).Formula = "=IF(OR(F2="""",COUNTIF($F$2:F2, _
_
F2)=1),""x"","""")"
.Range(.Cells(2, 8), .Cells(rng.Rows.Count - 1, 8)).Formula = "=SUMIF(F:F,F2,E:E)"
Set rngC = .Columns(7).SpecialCells(xlCellTypeFormulas)
rngC = rngC.Value
Set rngC = .Columns(8).SpecialCells(xlCellTypeFormulas)
rngC = rngC.Value
For Each rngC In .Range(.Cells(2, 7), .Cells(rng.Rows.Count - 1, 7)).SpecialCells( _
xlCellTypeConstants)
rngC.Offset(0, -2) = rngC.Offset(0, 1).Value
Next
.Cells(1, 7).CurrentRegion.Sort .Cells(1, 7), xlAscending, Header:=xlYes
Set rngC = .Range(.Cells(2, 7), .Cells(rng.Rows.Count - 1, 7)).SpecialCells(xlCellTypeBlanks)
If Not rngC Is Nothing Then rngC.EntireRow.Delete
.Columns(8).Delete
.Columns(7).Delete
End With
Application.ScreenUpdating = True
Set rng = Nothing
Set rngC = Nothing
End Sub
Viele Grüße
Eda

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabelle Zusammenfassen dynamisch
13.06.2015 15:14:37
fcs
Hallo Eda,
hier dein Makro entsprechend ergänzt und angepasst.
Gruß
Franz
Sub summary()
Dim rng As Range, rngC As Range
Dim lngCol As Long, Spa_1 As Long, Spa_2 As Long
On Error Resume Next
Application.ScreenUpdating = False
With ActiveSheet
Set rng = .ListObjects(1).Range
If rng Is Nothing Then Exit Sub
.Copy after:=ActiveSheet
End With
With ActiveSheet
.Name = rng.Parent.Name & " Summary"
If .AutoFilterMode Then .ShowAllData
Spa_1 = rng.Column + rng.Columns.Count
Spa_2 = Spa_1 + 1
.Range(.Cells(1, Spa_1), .Cells(1, Spa_2)) = "XXX"
.Range(.Cells(2, Spa_1), .Cells(rng.Rows.Count - 1, Spa_1)).FormulaR1C1 = _
"=IF(OR(RC[-1]="""",COUNTIF(R2C[-1]:RC[-1],RC[-1])=1),""x"","""")"
.Range(.Cells(2, Spa_2), .Cells(rng.Rows.Count - 1, Spa_2)).FormulaR1C1 = _
"=SUMIF(C[-2]:C[-2],RC[-2],C[-3]:C[-3])"
Set rngC = .Columns(Spa_1).SpecialCells(xlCellTypeFormulas)
rngC = rngC.Value
Set rngC = .Columns(Spa_2).SpecialCells(xlCellTypeFormulas)
rngC = rngC.Value
For Each rngC In .Range(.Cells(2, Spa_1), .Cells(rng.Rows.Count - 1, Spa_1)) _
.SpecialCells(xlCellTypeConstants)
rngC.Offset(0, -2) = rngC.Offset(0, 1).Value
Next
.Cells(1, Spa_1).CurrentRegion.Sort .Cells(1, Spa_1), xlAscending, Header:=xlYes
Set rngC = .Range(.Cells(2, Spa_1), .Cells(rng.Rows.Count - 1, Spa_1)) _
.SpecialCells(xlCellTypeBlanks)
If Not rngC Is Nothing Then rngC.EntireRow.Delete
.Columns(Spa_2).Delete
.Columns(Spa_1).Delete
End With
Application.ScreenUpdating = True
Set rng = Nothing
Set rngC = Nothing
End Sub

Anzeige
AW: Tabelle Zusammenfassen dynamisch
13.06.2015 20:56:03
Eda
Hallo Franz :)
Vielen Dank für deine Hilfe. Der Code funktioniert einwandfrei :D Gibt es auch eine Möglichkeit, dass er durch den Durchlauf nach "Text" oder "Wert" innerhalb der 1. Zeile die Spalte herausfindet? Ich glaube zwar nicht, dass die eigentliche Tabelle nach der Spalte "Wert" und "Text" weitere Spalten hat, aber wenn das Makro gleich für diesen Case läuft wäre es sicher gestellt.
Ich habe mal selber versucht den Code zu ändern und hatte ein paar Probleme. Wie kann ich z.B. eine Variable in range() eingeben:
Range(D:D) wäre ja die Spalte D
D = Var1
Range(Var1:Var1) funktioniert leider nicht :(
Vielen lieben Dank nochaml
Gruß Eda

Anzeige
AW: Tabelle Zusammenfassen dynamisch
14.06.2015 12:00:28
fcs
Hallo Eda,
Range(D:D) wäre ja die Spalte D
D = Var1
Range(Var1:Var1) funktioniert leider nicht :(

Unter VBA müssen Texte (Strings) immer in Anführungszeichen gesetzt werden.
Bei der Zuweisung von Werten zu Varialen steht die Variable immer links vom Gleichheitszeichen.
Mochte man mehrere Texte/Variablen zu einem Text verketten, dann muss man mit & als Operator arbeiten.
Also:
Range("D:D") 'wäre ja die Spalte D
Var1 = "D"
Range(Var1 & ":" & Var1) 'funktioniert dann :)

Wenn Zellbereiche dynamisch sind, dann ist es einfacher Cells(Zeile, Spalte), Rows(Zeile) und Columns(Spalte) in Verbindung mit nummerischen Werte für die Variablen Zeile und Spalte zu verwenden. Die A1-Schreibweise ist bei unveränderlichen Zellbereichen angebracht.
Wenn man in deinem Makro variable Positionen der Spalten "Text" und "Werte" berücksichtigen will, dann wird der Zusammenbau der Formeln in den Hilfsspalten komplizierter, da der Offset der temporären Hilfsspalten zu den beiden Spalten variabel wird.
Außerdem hat die Fehlerbehandlung mit
On Error Resume Next
so ihre Tücken. Das Makro arbeiet ggf. nicht korrekt, man bekommt aber keine Infos warum. Ich hab jetzt eine gezielte Fehlerbehandlung eingebaut, die ggf. auch einen Hinweis anzeigt.
Text-Datei mit angepasstem Makro
https://www.herber.de/bbs/user/98180.txt
Gruß
Franz

Anzeige
AW: Tabelle Zusammenfassen dynamisch
15.06.2015 19:24:08
Eda
Hallo Franz :)
Vielen Dank für deine Hilfe. Die Fehlerbehandlung ist auch ziemlich gut :) Danke auch für die Kommentierung! Das hilft ziemlich zum Verständnis.
Die eigentliche Tabelle besitzt als letzte Spalten wirklich "Wert" und dann "Text". Nun soll neben dem Zusammenfassen von doppelten Einträgen in der Spalte "Text" noch das Datum beachtet werden und immer die Zeilen zusammengefasst werde, die den gleichen Monat haben. Dabei spielt das Jahr keine Rolle, da zu Jahresbeginn die Tabelle erneuert wird.
Noch eine Beispieldatei dazu:
https://www.herber.de/bbs/user/98221.xlsx
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige