Excel VBA:按行数(按列值)对行进行排序然后按一个特定字符串排序

时间:2016-06-03 10:47:18

标签: excel vba

我不知道这是否是正确的做法。但是这里。我有一些excel数据:

Column 1 |  Column 2
1        |   open
3        |   issue
7        |   closed
8        |   open

我需要按第2列排序(列表顶部的'open'所有列,但是数字排序也是如此,因此带有'8,Open'的行将位于顶部)然后其余行需要排序只有数字最高的数字。

导致:

Column 1 |  Column 2
8        |   open
1        |   open
7        |   closed
3        |   issue

以下是我的数字代码(第12列)。我需要其他方面的帮助。

With ActiveSheet.Sort
    .SortFields.Clear
    .SortFields.Add Key:=Selection.EntireRow.Columns(12), SortOn:=xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
    .SetRange ActiveSheet.Range(Data)
    .Header = xlGuess
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With

2 个答案:

答案 0 :(得分:0)

您可以使用Sort对象

Range方法
Dim iniRow As Long

With Range("Data")
    .Sort key1:=.Range("B1"), order1:=xlDescending, Header:=xlYes '<~~ first sort by column 2 ("B" in my test)
    iniRow = Application.CountIf(.Columns(2).Cells, "open") '<~~ then count how many "open" are there
    .Offset(iniRow + 1).Resize(.Rows.Count - (iniRow + 1)).Sort key1:=.Range("A" & iniRow + 2), order1:=xlDescending, Header:=xlNo '<~~ finally order remaining by column 1 ("A" in my test)
End With

答案 1 :(得分:0)

试试这个:

Private Sub CommandButton1_Click()

Dim i                                   As Integer
Dim sht                                 As Worksheet
Dim StartDate, FinishDate               As Date
Dim counter                             As Integer

StartDate = CDate(DateFrom.Text)
FinishDate = CDate(DateTo.Text)

Set sht = Worksheets("ItemsCompleted")

i = 1
counter = 0
While sht.Cells(i, 1) <> ""
    If sht.Cells(i, 1) = CompanyName.Value Then ' compare value of cell with ComboBox value
        If sht.Cells(i, 3) >= StartDate And sht.Cells(i, 3) <= FinishDate Then ' check if column C date is whithin range of selected dates
            counter = counter + 1
        End If
    End If
    i = i + 1
Wend

ResultLabel = counter

End Sub

修改
_________________________________________________________________________________

ActiveSheet.Sort.SortFields.Clear
ActiveSheet.Sort.SortFields.Add Range("B1"), xlSortOnValues, xlAscending, "Open"
ActiveSheet.Sort.SortFields.Add Range("A1"), xlSortOnValues, xlDescending
With ActiveSheet.Sort
    .SetRange Range(Data)
    .Header = xlGuess
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With