Bearbeitet:

Bearbeitet:

Ich habe einige Spalten, die wichtigsten davon sind:Aufgaben,Priorität,Status.

Ich möchte alle Zeilen von Datensätzen, bei denen diePrioritätsagt "Hoch", um sich automatisch zu aktualisieren und über den anderen Datensätzen zu erscheinen.

Meine VB-Kenntnisse beschränken sich auf das Öffnen des VB-Editors. Bitte helfen Sie.

BEARBEITEN

Hier ist ein Screenshot von dem, was ich versuche zu tun. Ich habe bereits eine bedingte Formatierung festgelegt, um alle Zeilen hervorzuheben, in denenPrioritätzeigt alshoch. Jetzt müssen alle diese Datensätze (und die neuen Datensätze mit „hoher“ Priorität, wenn sie hinzugefügt werden) automatisch über den anderen Datensätzen angezeigt werden.

Excel-Screenshot

Antwort1

  1. Aktivieren Sie die automatische Tabellenfilterung.

  2. Legen Sie eine bedingte Formatierung für die Spalte „Status“ fest und markieren Sie hohe Werte mit einer angenehmen Hintergrundfarbe.

  3. Fügen Sie den untenstehenden Code in das Arbeitsblattmodul ein. Bearbeiten Sie im Code nach Bedarf die Spaltennummer, die Kopfzellenadresse und den Hintergrundfarbwert.

    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Column = 2 Then
        With AutoFilter.Sort
            .SortFields.Clear
            .SortFields.Add(Range("B1"), xlSortOnCellColor, xlAscending, , xlSortTextAsNumbers).SortOnValue.Color = RGB(242, 242, 242)
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With
    End If
    End Sub
    

Jetzt führt jede Änderung in Spalte B zu einer Neuanordnung Ihrer Datentabelle.

PS. Die endgültige Zeilenreihenfolge und der Besitz geänderter Zeilen sind unvorhersehbar. Sie können die endgültige Reihenfolge verfeinern, indem Sie detailliertere Sortierkriterien festlegen.

PPS. Natürlich können Sie die bedingte Formatierung weglassen und direkt nach dem Wert sortieren. Verwenden Sie diesen Beitrag also als Beispiel und nicht als Lösung.

Antwort2

Ich möchte eine Reihe von VBA (Makro) vorschlagen, die Ihnen helfen werden, Zeilen zu sortierenHochin aufsteigender Reihenfolge und danach mit Hintergrundfarbe füllen.

Vor dem Sortieren:

Bildbeschreibung hier eingeben


Nach dem Sortieren:

Bildbeschreibung hier eingeben


  • Drücken Sie entwederAlt+F11oderRechtsklickDieRegisterkarte „Tabelle“um den VB-Editor zu öffnen.
  • Kopieren und fügen Sie diesen VBA-Code als Standardmodul ein.

     Sub SortDataWithoutHeader()
    
    Range("Test12A.xlsm!Newdata1").Sort Key1:=Range("C2"), Order1:=xlAscending, Header:=xlYes
     Call Highlight
    
     End Sub
    

    Sub Highlight()

     Dim LastRow As Long, c As Range
     Dim MyRange As Range
LastRow = Cells(Cells.Rows.Count, "C").End(xlUp).Row
      Set MyRange = Range("C2:C" & LastRow)
      For Each c In MyRange
      If c.Value = "High" Then

       c.EntireRow.Interior.Color = vbGreen
       Else

       c.EntireRow.Interior.Color = xlNone
       End If

      Next

     End Sub

Achtung

  • In dieser Zeile Range("Test12A.xlsm!Newdata1"),Neue Daten1ist derBenannter Bereich, vermeidet die BearbeitungZu sortierender Bereichjedes Mal, wenn eine neue Zeile eingegeben wird.
  • Interior.Color = vbGreen,vbGrünist editierbar.

Bearbeitet:

Dieser Code sortiert und organisiert den Datensatz bei jedem neuen Eintrag automatisch und hebt nur die Zellen hervor, die Text enthalten.Hoch.

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next
If Not Intersect(Target, Range("C:C")) Is Nothing Then
Range("C1").Sort Key1:=Range("C2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom

Call Highlight

Application.EnableEvents = False

 End If
End Sub

Sub Highlight()
Dim cell As Range

For Each cell In Range("C:C")

If cell.Value = "High" Then
cell.Interior.Color = XlRgbColor.rgbLightGreen
Else
cell.Interior.Color = xlNone

End If
Next cell

End Sub

Passen Sie die Zellbezüge im VBA-Code nach Bedarf an.

Antwort3

Versuchen Sie es mit der Funktion Sortby(). Das funktionierte ganz einfach. Der VBA-Code war für jemanden wie mich (Excel-Anfänger) sehr entmutigend.

verwandte Informationen