Excel Sortierung automatisch nach neuer Eingabe

  • #1
L

lummo

Bekanntes Mitglied
Themenersteller
Dabei seit
05.03.2005
Beiträge
128
Reaktionspunkte
0
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:
   riesig




MVPs:


Gruß Matjes :)

Hier hab ich noch das passende für dich gefunden:
Aktiv programmieren lernen mit VBA
 
  • #5
Matjes schrieb:
Hallo beethoven,

die Lösung kommt natürlich zum Mitlesen ins Forum  ;D
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
[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
 
Thema:

Excel Sortierung automatisch nach neuer Eingabe

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben