按一列对多列进行排序

时间:2015-10-06 20:22:40

标签: excel vba excel-vba sorting

我在Excel中制作了一个包含三列的电子邮件列表。在工作表上,我有两个按钮,"按名称排序"和"按日期排序"。我想通过选择的按钮对所有三列进行排序,这样我可以更快地找到条目(我之后也会进入单独的查找功能)。

基本上,我想要工作表中工具栏上已有的排序功能,您只需按下它,它就知道要排序的列。我已经看到了宏和VBA的内容,但是所有这些都是按照单独的参数对列进行排序,而我需要链接这些列。

2 个答案:

答案 0 :(得分:1)

记录器在Range.Sort method上生成的代码非常冗长,可以根据实际情况进行切换。

如果列A:C是名称,电子邮件,添加日期,则首先按名称排序,然后添加日期

with worksheets("sheet1")    '<~~ set this properly!
    with .cells(1, 1).currentregion    '<~~ assumes data starts in A2 with a header row in A1:C1
        .Cells.Sort Key1:=.Columns(1), Order1:=xlAscending, _
                    Key2:=.Columns(3), Order2:=xlAscending, _
                    Orientation:=xlTopToBottom, Header:=xlYes
    end with
end with

首先按添加日期排序,然后按名称排序。

with worksheets("sheet1")    '<~~ set this properly!
    with .cells(1, 1).currentregion    '<~~ assumes data starts in A2 with a header row in A1:C1
        .Cells.Sort Key1:=.Columns(3), Order1:=xlAscending, _
                    Key2:=.Columns(1), Order2:=xlAscending, _
                    Orientation:=xlTopToBottom, Header:=xlYes
    end with
end with

您最多可以拥有3个。除此之外,你必须运行两次例行程序。 xlAscending的反面当然是xlDescending

答案 1 :(得分:0)

我发现找到工具栏上已有的东西的最好方法是在空白/新工作簿中使用“宏记录器”,然后查看代码。

列是否相邻?因为如果是这样你可以使用这样的东西;

//Alright, so this is if you wanted each of the columns to have their
//own values that you are sorting by, if you just want one criteria, 
//just use one of the lines
Dim varName as String
Dim varDate as String
Dim varExtra as String

ActiveSheet.Range("A:C").AutoFilter Field:=1, Criteria1:=varName
ActiveSheet.Range("A:C").AutoFilter Field:=2, Criteria1:=varDate
ActiveSheet.Range("A:C").AutoFilter Field:=3, Criteria1:=varExtra

基本上,它是说给出的三列,找到指示的字段(对应于一列)并按标准过滤。您还可以在Criteria spot中使用字符串值而不是变量。