2015-10-06 246 views
0

我在Excel中製作一個電子郵件列表,其中包含三列。在工作表上,我有兩個按鈕,「按名稱排序」和「按日期添加排序」。我想按所選按鈕對所有三列進行排序,這樣我就可以更快地找到條目(我以後也會進入單獨的查找功能)。按一列對多列進行排序

基本上,我想要在工作表中的工具欄上已經存在的排序功能,您只需按下它,它就知道已經排序了哪一列。我已經看到宏和VBA的東西,但所有這些都是由單獨的參數排序列,而我需要這些列鏈接。

+0

你有沒有試過任何代碼?如果沒有,請嘗試錄製一個宏,看看它是如何做到的。這應該給你一個在代碼中做什麼的指示。然後,如果您遇到困難,請回復您提供的代碼,我們將幫助您解決問題(因爲SO不是代碼請求站點)。 – Tim

+0

我想澄清一下,我絕不是在尋找某人爲我寫這篇文章 - 而是,我想用你之前使用過的方法進行指導,這些指令運行良好。例如,我甚至不知道你可以錄製一個宏 - 我以前採取的途徑從未讓我意識到我可以。我正在尋找那個 – Miksoko

回答

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

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 

基本上,它是說給定的三列,去找領域(這將對應於列)表示,並以標準的過濾器。您也可以在標準點中使用字符串值而不是變量。