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

Sortieren von Blöcken

Sortieren von Blöcken
Blöcken
Hallo,
ist es möglich Blöcke zu sortieren wie eine Tabelle.
https://www.herber.de/bbs/user/63693.xlsx
Ich möchte gerne die einzel Blöcke sortieren das der Block mit der kleinsten gesamt Zahl oben steht und dann aufsteigen sortieren.
Mit freundlichem Gruß
Sankt
Du hast zwar VBA nein angegeben, ...
08.08.2009 08:16:18
Tino
Hallo,
versuche es mal mit diesem VBA Code.
Sub SortBereiche()
Dim LCount As Long, LRow As Long
Dim Bereich As Range

With Application
.ScreenUpdating = False
.EnableEvents = False
    
    LCount = Application.WorksheetFunction.CountIf(Columns(1), "Name")
    
    For LCount = 1 To LCount
     If Bereich Is Nothing Then
      Set Bereich = Cells.Find("Name", , xlValues, xlPart, xlByRows, xlNext, False, False, False)
      Set Bereich = Bereich.Offset(1, 0)
      LRow = Application.Match("Gesamt", Range(Bereich, Cells(Rows.Count, 1)), 0) - 2
      Range(Bereich, Cells(LRow + Bereich.Row, 9)).Sort Bereich.Offset(0, 8), xlAscending, , , , , , xlNo
     Else
      Set Bereich = Cells.FindNext(Bereich)
      Set Bereich = Bereich.Offset(1, 0)
      LRow = Application.Match("Gesamt", Range(Bereich, Cells(Rows.Count, 1)), 0) - 2
      Range(Bereich, Cells(LRow + Bereich.Row, 9)).Sort Bereich.Offset(0, 8), xlAscending, , , , , , xlNo
     End If
    Next LCount

.ScreenUpdating = True
.EnableEvents = True
End With
End Sub
Gruß Tino
Anzeige
AW: Du hast zwar VBA nein angegeben, ...
08.08.2009 09:03:42
SanktFlorian
Hallo Tino,
Danke für deine schnelle Antwort, es hat auch etwas Funktioniert.
Er hat jetzt innerhalb der Blöcke die Ergebnisse nach größe aufsteigend sortiert.
Geht es auch das sich die Kompletten Blöcke mit den Spielern sortieren.
Der Block mit 433 oben und der mit 457 unten.
Gruß Sankt
Beispielmappe als xls (nicht xlsx)?
08.08.2009 10:08:20
Erich
Hi Andreas,
ist das die Frage, die du hier: https://www.herber.de/forum/archiv/1012to1016/t1013230.htm
schon einmal gestellt hast?
Dein Username "SanktFlorian" ist ganz ok, trotzdem könntest du in deinen Beiträgen deinen Vornamen nennen.
( Zu Vornamen und Nicknames schau bitte mal in die Forums-FAQ )
Deine Mappe kann ich (Nicht-XL2007-Besitzer) nicht öffnen. Kannst du die bitte noch mal als xls hochladen?
Ein Tipp (VBA-frei) schon mal vorab:
Wenn du in eine freie Spalte neben jeden Block die Gesamtpunktzahl des Blocks schreibst (kopierst),
auch in den Leerraum zwischen zwei Blöcken, kannst du nach dieser Spalte sortieren.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort nach Esslingen
Anzeige
Code- Beispiel und Datei als *.xls für Erich
08.08.2009 10:50:13
Tino
Hallo,
dafür musst Du erst mal alle Verbundenen Zellen raus machen.
Danach teste mal unten dieses Makro, einzigstes was mir noch nicht gefällt ist die Formatierung die beim Sortieren der Blöcke verrutscht.
Option Explicit

Sub SortBereiche()
Dim LCount As Long, LRow As Long, A As Long
Dim Bereich As Range
Dim iCalc As Integer
With Application
iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual

    LCount = Application.WorksheetFunction.CountIf(Columns(1), "Name")
    
    For A = 1 To LCount
     If Bereich Is Nothing Then
      Set Bereich = Cells.Find("Name", , xlValues, xlPart, xlByRows, xlNext, False, False, False)
      Set Bereich = Bereich.Offset(1, 0)
      LRow = Application.Match("Gesamt", Range(Bereich, Cells(Rows.Count, 1)), 0) - 2
      Range(Bereich, Cells(LRow + Bereich.Row, 9)).Sort Bereich.Offset(0, 8), xlAscending, , , , , , xlNo
     Else
      Set Bereich = Cells.FindNext(Bereich)
      Set Bereich = Bereich.Offset(1, 0)
      LRow = Application.Match("Gesamt", Range(Bereich, Cells(Rows.Count, 1)), 0) - 2
      Range(Bereich, Cells(LRow + Bereich.Row, 9)).Sort Bereich.Offset(0, 8), xlAscending, , , , , , xlNo
     End If
    Next A
   

   With Sheets("Spieltag").UsedRange
    With .Columns(.Columns.Count).Offset(0, 1)
     .FormulaR1C1 = _
        "=IF(OR(R[-1]C1=""Ergebnis"",RC1=""Schnitt"",R[-1]C1=""Schnitt""),R[-1]C,INDEX(RC1:R10000C9,MATCH(""Ergebnis"",RC1:R10000C1,0),9))"
     .Offset(0, 1).FormulaR1C1 = "=ROW()"

      Sheets("Spieltag").UsedRange.Sort .Cells(1, 1), xlAscending, .Cells(1, 1).Offset(0, 1), , xlAscending, , , xlNo
     
     .Cells(1, 1).Offset(0, 1).EntireColumn.Delete
     .EntireColumn.Delete
    End With
   End With
Cells.EntireRow.AutoFit
Cells.EntireColumn.AutoFit
.ScreenUpdating = True
.EnableEvents = True
.Calculation = xlCalculationAutomatic ' iCalc 
End With
End Sub
Hier noch die Datei als xls, falls jemand anderes sich noch versuchen möchte.
https://www.herber.de/bbs/user/63699.xls
Gruß Tino
Anzeige
Beispiel ohne VBA
08.08.2009 11:23:11
Erich
Hi Tino,
vielen Dank für die "Untersetzung" der Mappe!
Hi Andreas,
kannst du das hier nachvollziehen? https://www.herber.de/bbs/user/63700.xls
Wesentlich ist hier besonders Tinos Bemerkung zu verbundenen Zellen.
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
AW: Du hast zwar VBA nein angegeben, ...
08.08.2009 12:29:53
Tino
Hallo,
hier ist Deine Datei, drücke auf den Button.
Zuerst werden die Blöcke innerhalb sortiert, danach die Blöcke.
Zu beachten.
Keine Verbundenen Zellen.
Zwischen den Blöcken immer 4 Leerzeilen.
Aufbau aller Blöcke muss gleich sein.
https://www.herber.de/bbs/user/63702.xlsm
Gruß Tino
Anzeige
xlsm statt xls? Gemein! ;-))
08.08.2009 13:32:17
Erich
@Tino: Danke, hätt ich ähnlich gemacht :-) owT
08.08.2009 14:06:11
Erich
AW: @Tino: Danke, hätt ich ähnlich gemacht :-) owT
08.08.2009 20:56:21
SanktFlorian
Hallo
an alle die mir geantwortet haben.
Das sieht richtig gut aus. ABER!!!!!
Ich würde gerne nur die Blöcke sortieren, nicht das innere.
Gruß
Sankt
den unteren Teil vom Code
08.08.2009 21:14:37
Tino
Hallo,
ersetze den Code im Modul durch diesen.
Bedingungen sind wie oben gleich.
Sub SortBereiche()
Dim LCount As Long, LRow As Long, A As Long
Dim Bereich As Range
Dim iCalc As Integer
With Application
iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual


    LRow = Application.Match("Name", Columns(1), 0)
   
    With Range(Cells(LRow, 10), Cells(Rows.Count, 1).End(xlUp).Offset(4, 9))
     .FormulaR1C1 = _
        "=IF(OR(R[-1]C1=""Ergebnis"",COUNTIF(R[-4]C1:RC1,""Schnitt"")>0),R[-1]C,INDEX(RC1:R10000C9,MATCH(""Ergebnis"",RC1:R10000C1,0),9))"

      Range(Cells(LRow, 1), Cells(Rows.Count, 10).End(xlUp)).Sort Cells(LRow, 10), xlAscending, , , , , , xlNo
     .Cells(1, 1).Offset(0, 1).EntireColumn.Delete
     .EntireColumn.Delete
    End With

.ScreenUpdating = True
.EnableEvents = True
.Calculation = iCalc
End With
End Sub

Gruß Tino
Anzeige
AW: Sortieren von Blöcken
08.08.2009 22:09:12
Blöcken
Hallo Tino,
wenn ich über die Blöcke noch jeweils eine Zeile setzen möchte. wo muß ich dann im Code etwas abändern.
Gruß
Sankt
AW: Sortieren von Blöcken
08.08.2009 23:36:21
Blöcken
Hallo,
kannst du so anpassen
in der Zeile
With Range(Cells(LRow, 10), Cells(Rows.Count, 1).End(xlUp).Offset(4, 9))

Offset(4, 9) in Offset(5, 9) ändern
und in der Zeile
"=IF(OR(R[-1]C1=""Ergebnis"",COUNTIF(R[-4]C1:RC1,""Schnitt"")>0),R[-1]C,INDEX(RC1:R10000C9,MATCH(""Ergebnis"",RC1:R10000C1,0),9))
die -4 in -5 ändern
Oberhalb der Blöcke müssen aber auch 5 Leerzeilen stehen,
sonst muss die Formel nochmal angepasst werden!
Sub SortBereiche()
Dim LCount As Long, LRow As Long, A As Long
Dim Bereich As Range
Dim iCalc As Integer
With Application
iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual


    LRow = Application.Match("Name", Columns(1), 0)
   
    With Range(Cells(LRow, 10), Cells(Rows.Count, 1).End(xlUp).Offset(5, 9))
     .FormulaR1C1 = _
        "=IF(OR(R[-1]C1=""Ergebnis"",COUNTIF(R[-5]C1:RC1,""Schnitt"")>0),R[-1]C,INDEX(RC1:R10000C9,MATCH(""Ergebnis"",RC1:R10000C1,0),9))"

      Range(Cells(LRow, 1), Cells(Rows.Count, 10).End(xlUp)).Sort Cells(LRow, 10), xlAscending, , , , , , xlNo
     .Cells(1, 1).Offset(0, 1).EntireColumn.Delete
     .EntireColumn.Delete
    End With

.ScreenUpdating = True
.EnableEvents = True
.Calculation = iCalc
End With
End Sub
Gruß Tino
Anzeige
AW: Sortieren von Blöcken
10.08.2009 19:18:10
Blöcken
Hallo Tino,
würde es auch automatisch funktionieren?.
Und es es möglich aus einer zelle das Registerblatt zu benennen.?
Gruß
Andreas
mit Blattname aus Zelle
10.08.2009 19:31:27
Tino
Hallo,
bei diesem Code holt er sich den Tabellennamen aus einer Zelle. (Tabelle2 A1)
Das mit der Automatik, wann soll denn diese anlaufen?
Sub SortBereiche()
Dim LCount As Long, LRow As Long, A As Long
Dim Bereich As Range
Dim iCalc As Integer
Dim objTab As Worksheet

'hier den Tabellennamen und die Zelle anpassen wo die Tabelle drin steht 
'im Beispiel hier ist es die Tabelle2 Zelle A1 
Set objTab = Worksheets(Worksheets("Tabelle2").Range("A1").Text)

With Application

iCalc = .Calculation
.ScreenUpdating = False
.EnableEvents = False
.Calculation = xlCalculationManual

    With objTab
        LRow = Application.Match("Name", .Columns(1), 0)
       
        With .Range(.Cells(LRow, 10), .Cells(.Rows.Count, 1).End(xlUp).Offset(5, 9))
         .FormulaR1C1 = _
            "=IF(OR(R[-1]C1=""Ergebnis"",COUNTIF(R[-5]C1:RC1,""Schnitt"")>0),R[-1]C,INDEX(RC1:R10000C9,MATCH(""Ergebnis"",RC1:R10000C1,0),9))"
    
          objTab.Range(objTab.Cells(LRow, 1), objTab.Cells(objTab.Rows.Count, 10).End(xlUp)).Sort objTab.Cells(LRow, 10), xlAscending, , , , , , xlNo
         .Cells(1, 1).Offset(0, 1).EntireColumn.Delete
         .EntireColumn.Delete
        End With
    End With

.ScreenUpdating = True
.EnableEvents = True
.Calculation = iCalc
End With
End Sub
Gruß Tino
Anzeige
AW: mit Blattname aus Zelle
10.08.2009 20:46:33
SanktFlorian
Hallo Tino,
ich bekommen immer einen Laufzeitfehler.
Der Index liegt außerhalb des Index.
Er soll sich den Tabellennamen aus der Zelle A3 holen.
Den Inhalt für Zelle A3 hole ich mir vom Blatt Mannschaften A1
Der Registername hat nichts mit der Tabelle in diesem Fall zu tun.
Die automatische Ausführung soll nach jeder Abgeschlossenen Runde kommen.
Aber das brauche ich erst wenn ich mit dem Projekt fertig bin
dann zeige dir das komplette Resutat .
Gruß
Sankt
verstehe nur Bahnhof...
10.08.2009 21:05:50
Tino
Hallo,
lade besser nochmal ein Beispiel hoch.
Gruß Tino

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige