Excel Sortierung automatisch nach neuer Eingabe

Dieses Thema Excel Sortierung automatisch nach neuer Eingabe im Forum "Microsoft Office Suite" wurde erstellt von lummo, 8. Juni 2006.

Thema: Excel Sortierung automatisch nach neuer Eingabe Hallo liebe Liebenden! Ich erstelle für einen Verein eine Arbeitsdienstliste. In einer Spalte sind die...

  1. Hallo liebe Liebenden!

    Ich erstelle für einen Verein eine Arbeitsdienstliste. In einer Spalte sind die Arbeitszeiten eingegeben, jene werden addiert und in eine Ranking-Liste ausgegeben. Soweit sogut. Jetzt soll aber die Ranking-Liste jedesmal wenn eine neue Arbeitszeit eigegeben wird, automatisch aktualisiert werden. D.h. wenn einer zwei Stunden mehr hat, soll er automatisch wenn seine Stunden eingegeben sind auch in der Liste aufrücken. Bisher hab ich jedesmal manuell die Daten sortiert und gefiltert.

    z. B.
    Anton 12 Stunden an 5 Tagen
    Benno 11 Stunden an 5 Tagen
    Chrissi 11 Stunden an 4 Tagen
    usw.

    Leider ist auf dem Rechenblatt nicht nur ein Arbeitskonto enthalten sondern für 11 Abteilungen die entsprechenden Personen aufgelistet. Wenn ich nach jeder Dateneingabe die entsprechenden Tabellenbereiche neu sortieren muss ist das etwas zeitaufwändig.

    Frage: Gibt es eine Einstellung in Excel, oder eine Tastenkombination (Wie in Word die F9 für Felder aktualisieren) die ich noch nicht gefunden habe, die mir nach meinen vorgegebenen Sortierkriterien automatisch die Liste verändert, wenn ich die neuen Stundenzahlen für Chrissi eigegeben habe? Oder ist es sinnvoll, mir ein Makro zu programmieren, das evtl mit einer Schaltfläche verbunden die Sortierung übernimmt. Wenn ja, kann ich mit einer Schaltfläche alle 11 Abteilungen sortieren? Oder ist unter euch ein Freak, der mir eines dieser für mich undurchsichtigen Makros bastelt, die ich irgendwie in das Blatt einbauen muss... Mit einem Makrorekorder könnte ich zur Not umgehen ;D

    Besten Dank für die Hilfe,

    lummo

    PS: Office 2000 auf WinME
     
  2. Hallo lummo,

    sckick mir mal die Datei. Dann bastel ich dir einen Makro dazu.

    Gruß Matjes :)
     
  3. Ich wäre an dem Makro auch interessiert.

    Ne andere Frage. Wo kann man sich in die Markoproblematik mal belesen, da ich Zukunft mich öfters mal mit dem Thema beschäftigen muss.

    Thx für die Mühe
     
  4. Hallo beethoven,

    die Lösung kommt natürlich zum Mitlesen ins Forum  ;D

    Bei der Lektüre bzw. dem Einstieg stellt sich die Frage, welche Grund- oder Fortgeschrittenen-Kenntnisse hast du in einer Programmiersprache ?

    Hier im Forum kannst du mal im Office-Forum die Suchfunktion mit den Begriffen Makro Excel bzw. Makro Word benutzen. Da solltest Du auf genug Futter stossen.

    Weitere Seiten:
    http://www.herber.de/   riesig
    http://www.erlandsendata.no/english/index.php?d=envbacbmenuxl97
    http://www.vbarchiv.net/home/willkommen.php
    http://activevb.de/startseite/index.html
    http://www.schmittis-page.de/
    MVPs:
    http://www.mvps.org/

    Gruß Matjes :)

    Hier hab ich noch das passende für dich gefunden:
    Aktiv programmieren lernen mit VBA
    http://www.purl.org/stefan_ram/pub/vba_de
     
  5. Hm, dass war mir auch klar  ;D

    Naja, bin wohl noch Einsteiger. Thx für die Links zum Lesen.
     
  6. Hallo lummo,

    hier schon mal der Makro. Was zwischen ANPASSEN und ANPASSEN ENDE steht, muß noch deinen Gegebenheiten angepaßt werden.

    Kannst mir die Datei trotzdem schicken. dann bau ich dir noch einen Button dazu.

    Gruß Matjes :)
    Code:
    Option Explicit
    Sub StundenHitlisteSortieren()
    
     ->>>> A N P A S S E N <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      
     ->Spaltenoffset von der linken Spalte des zu sortierenden Bereiches
      Const cSPOffsetName = 0             'Spalte Name
      Const cSPOffsetVorname = 1         ->Spalte Vorname
      Const cSPOffsetStd = 2             ->Spalte Stunden
      Const cSPOffsetTage = 3             'Spalte Tage
     ->zu sortierende 11 Bereiche (ohne Überschrift !)
      Dim Bereiche As Variant
      Bereiche = Array(A4:D14, F4:I18, K4:N22, _
                       A30:D44, F30:I47, K30:N58, _
                       A60:D74, F60:I67, K60:N68, _
                       A80:D94, F80:I112)
      
     ->>>> A N P A S S E N   E N D E <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      Dim x As Long, ws As Worksheet
      
      If vbYes = MsgBox(Wollen Sie wirklich sortieren ?, vbYesNo) Then
      
        Set ws = ActiveSheet               'aktives Blatt setzen
        Application.ScreenUpdating = False->Bildschirmupdate abschalten
        
       ->für alle Bereiche
        For x = LBound(Bereiche) To UBound(Bereiche)
        
         ->Bereich nach
         -> - Stunden absteigend
         -> - Tage    absteigend
         -> - Name    aufsteigend
         ->sortieren
          ws.Range(Bereiche(x)).Sort _
            Key1:=ws.Cells(ws.Range(Bereiche(x)).Row, _
                           ws.Range(Bereiche(x)).Column + cSPOffsetStd), _
            Order1:=xlDescending, _
            Key2:=ws.Cells(ws.Range(Bereiche(x)).Row, _
                           ws.Range(Bereiche(x)).Column + cSPOffsetTage), _
            Order2:=xlDescending, _
            Key3:=ws.Cells(ws.Range(Bereiche(x)).Row, _
                           ws.Range(Bereiche(x)).Column + cSPOffsetName), _
            Order3:=xlAscending, _
            Header:=xlNo
        Next
        Application.ScreenUpdating = True
        Set ws = Nothing
      End If
    End Sub
     
  7. Hallo lummo,

    hier noch eine 2. Variante, bei der du nicht den Makro bei Bereichsänderungen editieren mußt.
    Bereich1 bis Bereich11 sind als Namen zu definieren.
    (unter Einfügen->Name->Festlegen)

    Gruß Matjes :)
    Code:
    Option Explicit
    Sub StundenHitlisteSortieren2()
    
     ->>>> A N P A S S E N <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      
     ->Spaltenoffset von der linken Spalte des zu sortierenden Bereiches
      Const cSPOffsetName = 0             'Spalte Name
      Const cSPOffsetVorname = 1         ->Spalte Vorname
      Const cSPOffsetStd = 2             ->Spalte Stunden
      Const cSPOffsetTage = 3             'Spalte Tage
     ->zu sortierende 11 Bereiche (ohne Überschrift !!!!!!!!!!)
     ->Bereiche sind unter Einfügen->Namen->Festlegen  zu definieren
      Dim NamenBereiche As Variant
      NamenBereiche = Array(Bereich1, Bereich2, Bereich3, _
                            Bereich4, Bereich5, Bereich6, _
                            Bereich7, Bereich8, Bereich9, _
                            Bereich10, Bereich11)
     ->>>> A N P A S S E N   E N D E <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      
      Dim x As Long, wb As Workbook, r As Range, sMldg As String
      
      If vbYes = MsgBox(Wollen Sie wirklich sortieren ?, vbYesNo) Then
      
        Set wb = ActiveWorkbook           ->aktive Mappe setzen
        Application.ScreenUpdating = False->Bildschirmupdate abschalten
        
       ->für alle Bereiche
        On Error Resume Next
        sMldg = 
        For x = LBound(NamenBereiche) To UBound(NamenBereiche)
        
          Set r = wb.Names(NamenBereiche(x)).RefersToRange
          If Err.Number <> 0 Then
           ->Name nicht definiert
            If sMldg =  Then sMldg = NamenBereiche(x) Else sMldg = sMldg & vbLf & NamenBereiche(x)
            Err.Clear
          Else
           ->Bereich nach Stunden absteigend, Tage absteigend, Name aufsteigend sortieren
            r.Sort _
              Key1:=r.Parent.Cells(r.Row, r.Column + cSPOffsetStd), Order1:=xlDescending, _
              Key2:=r.Parent.Cells(r.Row, r.Column + cSPOffsetTage), Order2:=xlDescending, _
              Key3:=r.Parent.Cells(r.Row, r.Column + cSPOffsetName), Order3:=xlAscending, _
              Header:=xlNo
          End If
          
        Next
        On Error GoTo 0
        Application.ScreenUpdating = True
        Set wb = Nothing: Set r = Nothing
        
       ->ggf Fehlermeldung ausgeben
        If sMldg <>  Then
          sMldg = _
            Folgende Namen sind nicht definiert: & vbLf & sMldg & vbLf & _
            Für diese Bereiche konnte keine Sortierung durchgeführt werden.
          MsgBox sMldg
        End If
      End If
      
    End Sub
     
  8. Mit dieser Variante wird bei gleicher Stundenzahl, Anzahl Tage und Name auch noch nach Vorname sortiert.  ;D

    Gruß Matjes :)
    Code:
    Option Explicit
    Sub StundenHitlisteSortieren3()
    
     ->>>> A N P A S S E N <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      
     ->Spaltenoffset von der linken Spalte des zu sortierenden Bereiches
      Const cSPOffsetName = 0             'Spalte Name
      Const cSPOffsetVorname = 1         ->Spalte Vorname
      Const cSPOffsetStd = 2             ->Spalte Stunden
      Const cSPOffsetTage = 3             'Spalte Tage
     ->zu sortierende 11 Bereiche (ohne Überschrift !!!!!!!!!!)
     ->Bereiche sind unter Einfügen->Namen->Festlegen  zu definieren
      Dim NamenBereiche As Variant
      NamenBereiche = Array(Bereich1, Bereich2, Bereich3, _
                            Bereich4, Bereich5, Bereich6, _
                            Bereich7, Bereich8, Bereich9, _
                            Bereich10, Bereich11)
     ->>>> A N P A S S E N   E N D E <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
      
      Dim x As Long, wb As Workbook, r As Range, sMldg As String
      
      If vbYes = MsgBox(Wollen Sie wirklich sortieren ?, vbYesNo) Then
      
        Set wb = ActiveWorkbook           ->aktive Mappe setzen
        Application.ScreenUpdating = False->Bildschirmupdate abschalten
        
       ->für alle Bereiche
        On Error Resume Next
        sMldg = 
        For x = LBound(NamenBereiche) To UBound(NamenBereiche)
        
          Set r = wb.Names(NamenBereiche(x)).RefersToRange
          If Err.Number <> 0 Then
           ->Name nicht definiert
            If sMldg =  Then sMldg = NamenBereiche(x) Else sMldg = sMldg & vbLf & NamenBereiche(x)
            Err.Clear
          Else
           ->Bereich nach Vorname aufsteigend sortieren
            r.Sort _
              Key1:=r.Parent.Cells(r.Row, r.Column + cSPOffsetVorname), Order1:=xlAscending, _
              Header:=xlNo
           ->Bereich nach Stunden absteigend, Tage absteigend, Name aufsteigend sortieren
            r.Sort _
              Key1:=r.Parent.Cells(r.Row, r.Column + cSPOffsetStd), Order1:=xlDescending, _
              Key2:=r.Parent.Cells(r.Row, r.Column + cSPOffsetTage), Order2:=xlDescending, _
              Key3:=r.Parent.Cells(r.Row, r.Column + cSPOffsetName), Order3:=xlAscending, _
              Header:=xlNo
          End If
          
        Next
        On Error GoTo 0
        Application.ScreenUpdating = True
        Set wb = Nothing: Set r = Nothing
        
       ->ggf Fehlermeldung ausgeben
        If sMldg <>  Then
          sMldg = _
            Folgende Namen sind nicht definiert: & vbLf & sMldg & vbLf & _
            Für diese Bereiche konnte keine Sortierung durchgeführt werden.
          MsgBox sMldg
        End If
      End If
      
    End Sub
     
  9. Hallo Matjes,

    da bin ich erst mal platt, danke für die viele Mühe. Hast du denn nix anderes zu tun, als hier an Makro´s zu basteln? Leider muss ich dich mit der Datei etwas vertrösten, noch hab ich nicht alle Daten zusammen. Es werden immer mehr Einzelposten, die ich noch in die Ranking mit aufnehmen muss. Dann soll es auch noch ein Gesamtranking werden...

    Ich hab gestern noch mal mit einem Prototyp experimentiert und ein Makro aufgezeichnet, das halt erst nach Klick auf eine Schaltfläche alle gewünschten Sortierungen vornimmt. Bei meinem Test lief es ganz gut, leider haben sich jetzt die Kriterien geändert und ich bekomm erst am Wochenende die tatsächlichen Daten und Namen. Mit einer Datei muss ich dich daher bis nächste Woche vertrösten, trotzdem danke für dein Angebot und deine Arbeit bis hierher.

    Ich meld mich wieder, wenn es ernst wird.

    lummo[br][br]Erstellt am: 09.06.06 um 15:27:36[hr][br]Hallo zusammen,

    mein Problem mit der Ranking hat sich erledigt. Es hat sich ein Wissender gefunden, der mir die Arbeit abnimmt und die Verwaltung der Arbeitsstunden von Hand einträgt...

    Matjes, danke für die Mühen, ich benutz das Macro mal für mich alleine und schau nach, ob mein Wissender bei seiner Ankündigung bleibt.

    lummo
     
Die Seite wird geladen...

Excel Sortierung automatisch nach neuer Eingabe - Ähnliche Themen

Forum Datum
Sortierung in Excel 2002 Windows XP Forum 14. Sep. 2008
Excel 2000 Autofilter Falschsortierung Windows XP Forum 2. Okt. 2006
Excel XP Autofilter ohne Sortierung? Microsoft Office Suite 24. Aug. 2006
Excel Filter/Sortierung Windows XP Forum 17. Jan. 2006
Excel 2003: Automatische Sortierung Windows XP Forum 20. Dez. 2005