Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
1120to1124
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

TotalList:=Array Argument

TotalList:=Array Argument
Franz
Hallo,

Sub Sortiere
ActiveCell.CurrentRegion.Sort _
Key1:=Range("I2"), Order1:=xlAscending, _
Key2:=Range("G2"), Order2:=xlAscending, _
Key3:=Range("A2"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
Selection.Subtotal GroupBy:=10, Function:=xlSum, TotalList:=Array(4, 11, 12 _
, 13, 14, 15), Replace:=True
End Sub

Gibt es die Möglichkeit bei diesem Makro das "TotalList:=Array" dynamisch zu bilden, dh. anstelle (4,11...bis 15) den Anfang und das Ende anders zu definieren?
Wäre schön ihr könntet mir helfen.
Grüße
Franz D.

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: TotalList:=Array Argument
29.11.2009 16:26:23
fcs
Hallo Franz,
du könntest versuchen ein Array mit Spaltennummern zu erzeugen. Die Spaltennummern müsstest du dann z.B. durch suchen von Texten in den Spaltentiteln ermitteln.
Was meins du denn mit Ende und Anfang anders definieren?
Gruß
Franz
Beispiel:

Sub Sortiere()
Dim Titel As Range, arrSpalten() As Long, arrNamen, intI, intZeilen, Zelle As Range
arrNamen = Array("Feld01", "Feld03", "Feld07", "Feld08", "Feld13", "Feld12")
Set Titel = ActiveCell.CurrentRegion.Rows(1)
For intI = LBound(arrNamen) To UBound(arrNamen)
Set Zelle = Titel.Find(what:=arrNamen(intI), Lookat:=xlWhole, LookIn:=xlValues)
If Not Zelle Is Nothing Then
intZeilen = intZeilen + 1
ReDim Preserve arrSpalten(1 To intZeilen)
arrSpalten(intZeilen) = Zelle.Column
End If
Next
ActiveCell.CurrentRegion.Sort _
Key1:=Range("I2"), Order1:=xlAscending, _
Key2:=Range("G2"), Order2:=xlAscending, _
Key3:=Range("A2"), Order3:=xlAscending, _
Header:=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:= _
xlTopToBottom, DataOption1:=xlSortNormal, DataOption2:=xlSortNormal, _
DataOption3:=xlSortNormal
If intZeilen > 0 Then
Selection.Subtotal GroupBy:=10, Function:=xlSum, TotalList:=arrSpalten, _
Replace:=True
End If
End Sub

Anzeige
AW: TotalList:=Array Argument
29.11.2009 21:23:02
Franz
Hallo Franz ,
Unter "Anfang" verstehe ich die 1.zu summierende Spalte, unter "Ende" die letzte, wonach alle Spalten in eine Reihenfolge komplett stehen. Beide Werte können immer wieder unterschiedlich sein. Es gäbe wahrscheinlich auch die Möglichkeit eine "WorksheetFunction.Subtotal" zu benutzen. Wie? Da müsste ich mich zuerst in den Recherchen durchboxen um die richtige Syntax zu finden. Ich werde dein Lösungvorschlag Morgen in Ruhe studieren. Er sieht vielversprechend aus.
Grüße von Franz D.
AW: TotalList:=Array Argument
29.11.2009 22:59:14
Franz
Hallo Franz,
Du warst richtig mit der "Dynamisierung" mittels Array-Technick. Ich werde die Materie "pauken". Habe durch "googleln" (auch "bingen") folgendes gefunden und für meine Zwecke angepasst:
Sub TotalList_dynamisch()'Quelle: http://www.xtremevbtalk.com/archive/index.php/t-261411.html
Dim aryTotalList()
Dim intColMax As Integer, intColNum As Integer, intColGroup As Integer, i As Integer
intColMax = 0
intColMax = Cells(1).CurrentRegion.Columns.Count 'Spaltenanzahl Insgesamt?
intColNum = 4           'ab wann soll summiert werden?
intColGroup = 9         'Welches Kriterium soll analysiert werden
i = 0
Do Until intColNum > intColMax
'aber die Spalten 5 bis 11 ignorieren mit dem "verpönten" Goto
If intColNum > 4 And intColNum 

Ich hoffe andere "Suchenden" können dies verwenden oder noch optimieren.
Gute Nacht an die Community der Excellisten
Franz D.
Anzeige
AW: "verpöntes" Goto
30.11.2009 06:53:40
fcs
Hallo Franz D.,
Goto ist nicht verpönt wenn es zweckmäßig ist.
In der gefundenen Lösung ist es nicht zweckmäßig. Man muss nur die If-Anweisung mit End If schließen oder hier das zweckmäßigere Select Case verwenden.
Gruß
Franz
'If-Anweisung schliessen
Do Until intColNum > intColMax
If intColNum > 4 And intColNum  intColMax
Select Case intColNum
Case 4 To 12
i = i + 1
ReDim Preserve aryTotalList(1 To i)
aryTotalList(i) = intColNum 'Array TotalList dynamisch bilden
Case Else
'do nothing
End Select
intColNum = intColNum + 1
Loop

Anzeige
AW: TotalList dynamisch immer besser
30.11.2009 23:35:39
Franz
Guten Abend Franz,
Habe mittlerweile dein Select case integriert, einfach Spitze. Der Wald ist leider voller Bäume.
MERCI und Tschüss!
Franz D.

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige