我在Excel中制作了一个包含三列的电子邮件列表。在工作表上,我有两个按钮,"按名称排序"和"按日期排序"。我想通过选择的按钮对所有三列进行排序,这样我可以更快地找到条目(我之后也会进入单独的查找功能)。
基本上,我想要工作表中工具栏上已有的排序功能,您只需按下它,它就知道要排序的列。我已经看到了宏和VBA的内容,但是所有这些都是按照单独的参数对列进行排序,而我需要链接这些列。
答案 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中使用字符串值而不是变量。