我在Excel中製作一個電子郵件列表,其中包含三列。在工作表上,我有兩個按鈕,「按名稱排序」和「按日期添加排序」。我想按所選按鈕對所有三列進行排序,這樣我就可以更快地找到條目(我以後也會進入單獨的查找功能)。按一列對多列進行排序
基本上,我想要在工作表中的工具欄上已經存在的排序功能,您只需按下它,它就知道已經排序了哪一列。我已經看到宏和VBA的東西,但所有這些都是由單獨的參數排序列,而我需要這些列鏈接。
我在Excel中製作一個電子郵件列表,其中包含三列。在工作表上,我有兩個按鈕,「按名稱排序」和「按日期添加排序」。我想按所選按鈕對所有三列進行排序,這樣我就可以更快地找到條目(我以後也會進入單獨的查找功能)。按一列對多列進行排序
基本上,我想要在工作表中的工具欄上已經存在的排序功能,您只需按下它,它就知道已經排序了哪一列。我已經看到宏和VBA的東西,但所有這些都是由單獨的參數排序列,而我需要這些列鏈接。
記錄儀在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
。
我發現找到已經在工具欄上的東西的最佳方式是在空白/新工作簿中使用「宏記錄器」,然後查看代碼。
列是否彼此相鄰?因爲如果是這樣你可以使用這樣的東西;
//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
基本上,它是說給定的三列,去找領域(這將對應於列)表示,並以標準的過濾器。您也可以在標準點中使用字符串值而不是變量。
你有沒有試過任何代碼?如果沒有,請嘗試錄製一個宏,看看它是如何做到的。這應該給你一個在代碼中做什麼的指示。然後,如果您遇到困難,請回復您提供的代碼,我們將幫助您解決問題(因爲SO不是代碼請求站點)。 – Tim
我想澄清一下,我絕不是在尋找某人爲我寫這篇文章 - 而是,我想用你之前使用過的方法進行指導,這些指令運行良好。例如,我甚至不知道你可以錄製一個宏 - 我以前採取的途徑從未讓我意識到我可以。我正在尋找那個 – Miksoko