2016-04-25 7 views
0

nach der Anforderung zu bewegen, habe ich alle Defekte nach Schweregrad gefiltert dann filtern Sie mit Lob, aber meine Anforderung alle JIRA in Spalte A sollte an der Spitze sein.Wie Range-Werte zu Top nach Filterung mit Vba Makro

ich bekomme nicht, wie man es an Spitze aller JIRA in der Spalte A. bewegt. Würdige Hilfe hier.

Hinweis: nach der Bewegung sollte der Schweregrad nicht verändert werden, dh. Alle JIRA-Fehler sollten mit Schweregrad gefiltert werden. gemäß dem Screenshot beigefügt

Sub moverange() 
lRow = Range("A" & Rows.Count).End(xlUp).row 
Set MR = Range("A2:A" & lRow) 
MR.Select 
For Each cell In MR 
'If cell.Value = "Jira" Then Selection.EntireRow.Cut Shift:=xlUp 
If cell.Value = "Jira" Then 
Selection.Cut 
'Rows("2:2").Select 
Selection.Insert Shift:=xlUp 
End If 
Next 
End Sub 

enter image description here

+0

Zeit mit der Tabellenfunktion verbringen. Wählen Sie in den Rohdaten das Optionsfeld Einfügen und klicken Sie auf Tabelle. Es bietet Ihnen viele leistungsstarke Filter- und Sortierfunktionen, um Ihre Daten zu betrachten. – OldUgly

+0

Für Ihre VBA, lesen Sie auf [Range.Sort] (https://msdn.microsoft.com/en-us/library/office/ff840646.aspx) statt Ausschneiden und Einfügen. – OldUgly

+0

@ OldUgly: das Blatt ist dynamisch, jedes Mal ziehen sie Defekte von verschiedenen Alm und Jira. Was ich in meinem Kopf hatte, war einfach auf den Knopf klicken und alles sollte gehen. Filter und Option konnte ich es tun. Problem passiert, wenn die Reihe A in alphabetischer Reihenfolge sortiert, JIRA ging dazwischen, So Anforderung war, alle JIRA Defekte auf der oberen Auflage auf der Unterseite zu zeigen. schätzen Sie Ihre Unterstützung. – Venkat

Antwort

0

Wie wäre es eine einfache Helfer-Säule, die 0 für „Jira“ und 1 für nicht „Jira“ (oder truefalse oder was auch immer) und dann sortieren ist es mit der Helfer-Spalte als erste Kriterien ...

Oder, wenn Sie nicht die Reihenfolge ändern wollen (und nur bekommen „Jira“ oben) in Helferspalten verwenden (Start in Zeile 2):

=ROW()+1000*(A2<>"Jira") 

und dann einfach nach der Hilfesäule sortieren.
Auf diese Weise bleibt die Reihenfolge gleich, außer dass "Jira" zuerst und alles andere später kommt.

Sie können auch eine spezielle Sortierreihenfolge, wenn die alte Ordnung mit benutzerdefinierten Sortier keine Rolle spielt verwenden:

Sort by: Column A 
Sort on: Values 
Order: Custom List... 

Ein neues Fenster öffnet sich und es müssen Sie einfach eingeben „Jira“ (ohne Anführungszeichen) in der rechten Box und drücken Sie OK. Auf diese Weise wird es wie normal angeordnet, aber "Jira" wird zuerst kommen.

Um es über VBA tun können Sie es whith diesem Code tun:

Sub moverange() 
    Dim SRange As Range 
    With ActiveSheet.Sort 
    Set SRange = .Parent.Range("A2", .Parent.Range("A" & Rows.Count).End(xlUp)) 
    .SortFields.Clear 
    .SortFields.Add SRange, 0, 1, "Jira", 0 
    .SetRange SRange.EntireRow 
    .Apply 
    End With 
End Sub 

Wenn Sie noch Fragen haben, fragen Sie einfach;)

+0

danke eine Tonne für Ihre Bemühungen, hier zu helfen, es wählt alle JIRA und setzt oben auf, aber nur Sache ist es löscht die Sorte, ich bin sicher, wird eine Chance bekommen, Ihre Logik zu nutzen. Danke nochmal.:) – Venkat

0

Try this:

Sub MoveRange()   
    Dim LastRow As Long 
    Dim MyRange As Range 
    Dim SortArr1 As Variant, SortArr2 As Variant 

    LastRow = Cells(Rows.Count, "A").End(xlUp).Row 
    Set MyRange = Range("A1:G" & LastRow)  '-->change "G" to any other column if needed 

    'setting sort order for Column "E" 
    SortArr1 = Array("high", "medium", "low") 
    Application.AddCustomList ListArray:=SortArr1 

    'sorting Column "E" 
    MyRange.Sort Key1:=Range("E1"), Order1:=xlAscending, _ 
     Header:=xlYes, OrderCustom:=Application.CustomListCount + 1, MatchCase:= _ 
     False, Orientation:=xlTopToBottom 
    Application.DeleteCustomList Application.CustomListCount 

    'setting sort order for Column "A" 
    SortArr2 = Array("jira") 
    Application.AddCustomList ListArray:=SortArr2 

    'sorting Column "A" 
    MyRange.Sort Key1:=Range("A1"), Order1:=xlAscending, _ 
     Header:=xlYes, OrderCustom:=Application.CustomListCount + 1, MatchCase:= _ 
     False, Orientation:=xlTopToBottom 
    Application.DeleteCustomList Application.CustomListCount 
End Sub 

Hier Ich habe angenommen, dass Ihre Daten bis Spalte G sind. Der obige Code sortiert die Daten zweimal. Zuerst in Spalte E, um Daten nach Schweregrad und dann nach Spalte A zu sortieren.

+0

vielen Dank es funktionierte perfekt wie ich es wollte. Es löschte nicht den Schweregradfilter und JIRA oben und für andere LOB (Spalte) kann ich die angewandten Schweregradfilter sehen. – Venkat