Note: The other languages of the website are Google-translated. Back to English

如何在Excel中按值自動對列進行排序?

例如,您有一個如下圖所示的採購表。 現在您希望在此列中輸入新數字/價格時自動對價格列進行排序,您該如何解決? 在這裡,我介紹一個 VBA 宏來幫助您在 Excel 中按值自動對特定列進行排序。

使用VBA按值自動對列進行排序


使用VBA按值自動對列進行排序

一旦您在Excel中輸入新數據或更改列中的值,此VBA宏就會自動對特定列中的所有數據進行排序。

1。 右鍵單擊當前工作表名稱 工作表標籤欄,然後單擊 查看代碼 從右鍵單擊菜單中。

2。 在打開的Microsoft Visual Basic for Application對話框中,將以下VBA宏代碼粘貼到打開的窗口中。

VBA:Excel中的自動排序列

Private Sub Worksheet_Change(ByVal Target As Range)
On Error Resume Next
If Not Intersect(Target, Range("B:B")) Is Nothing Then
Range("B1").Sort Key1:=Range("B2"), _
Order1:=xlAscending, Header:=xlYes, _
OrderCustom:=1, MatchCase:=False, _
Orientation:=xlTopToBottom
End If
End Sub

備註:
1)在上面的vba代碼中, B:B 意味著它將自動對B列進行排序, B1 是 B 列中的第一個單元格, B2 是 B 列中的第二個單元格,您可以根據需要更改它們。
2) 片段 標頭:=xl是 在第 5 行告訴 Excel 您將排序的範圍有一個標題,以便在排序時不包括該範圍的第一行。 如果沒有標題,請將其更改為 標題:=xlNo; 和改變 鍵1:=範圍(“B2”) 在第 4 行 鍵1:=範圍(“B1”).

3。 然後返回工作表,當您在“價格”列中輸入新數字或修改任何現有價格時,“價格”列將自動按升序排序。

備註:當您在價格列中輸入新數字時,您必須在原始數字下方的第一個空白單元格中輸入數字。 如果新輸入的數字和原數字之間有空白單元格,以及原數字之間有空白單元格,則該列不會自動排序。


演示:使用Excel中的VBA自動按值對列進行排序


Excel的Kutools 包含 300 多種 Excel 便捷工具,30 天內免費試用,無限制。 立即下載並免費試用!

在Excel中輕鬆按出現頻率排序

Kutools for Excel的 高級排序 該實用程序支持在Excel中按文本長度,姓氏,絕對值,頻率等對數據進行快速排序。


廣告按頻率2排序


最佳辦公效率工具

Kutools for Excel 解決了你的大部分問題,並將你的生產力提高了 80%

  • 重用: 快速插入 複雜的公式,圖表 以及您以前使用過的任何東西; 加密單元 帶密碼 創建郵件列表 並發送電子郵件...
  • 超級公式欄 (輕鬆編輯多行文本和公式); 閱讀版式 (輕鬆讀取和編輯大量單元格); 粘貼到過濾範圍...
  • 合併單元格/行/列 不會丟失數據; 拆分單元格內容; 合併重複的行/列...防止細胞重複; 比較範圍...
  • 選擇重複或唯一 行; 選擇空白行 (所有單元格都是空的); 超級查找和模糊查找 在許多工作簿中; 隨機選擇...
  • 確切的副本 多個單元格,無需更改公式參考; 自動創建參考 到多張紙; 插入項目符號,複選框等...
  • 提取文字,添加文本,按位置刪除, 刪除空間; 創建和打印分頁小計; 在單元格內容和註釋之間轉換...
  • 超級濾鏡 (將過濾方案保存並應用於其他工作表); 高級排序 按月/週/日,頻率及更多; 特殊過濾器 用粗體,斜體...
  • 結合工作簿和工作表; 根據關鍵列合併表; 將數據分割成多個工作表; 批量轉換xls,xlsx和PDF...
  • 超過 300 項強大的功能. 支持 Office / Excel 2007-2021 和 365。支持所有語言。 在您的企業或組織中輕鬆部署。 完整功能 30 天免費試用。 60 天退款保證。
kte選項卡201905

Office選項卡為Office帶來了選項卡式界面,使您的工作更加輕鬆

  • 在Word,Excel,PowerPoint中啟用選項卡式編輯和閱讀,發布者,Access,Visio和Project。
  • 在同一窗口的新選項卡中而不是在新窗口中打開並創建多個文檔。
  • 將您的工作效率提高 50%,每天為您減少數百次鼠標點擊!
officetab底部
按評論排序
留言 (37)
5中的5評分 · 1評級
網站主持人對此評論進行了最小化
漂亮,漂亮,漂亮,非常感謝。 我自己永遠無法解決這個問題,我真的很感謝你分享這個!!!
網站主持人對此評論進行了最小化
在為我的 Excel 圖表輸入數據時,我正在尋找相同的自動排序。 很難理解您在此處作為示例輸入的內容的詳細信息。 如果有人在這裡做了上面的例子可以幫助我整理我的工作表,我會非常感激。 我有一個 F1 圖表,其中顯示了獲勝者和積分,並且想要它,以便當在特定比賽的車手姓名旁邊輸入積分時,表格右側的總數按數字順序排列,沒有將結果與其他驅動程序混合。 似乎我無法在此消息中放置我的圖表的附件,因此如果您能夠為我更改我的圖表,那麼這將發生,我希望收到您的來信。 我可以通過電子郵件發送給你。 如果您能對此提供幫助,請發送電子郵件至 lordmarshall2013@gmail.com 並在 SUBJECT 行中寫下 F1 Excel 幫助,並將回复您隨附的圖表。 提前感謝您提供的任何幫助。
網站主持人對此評論進行了最小化
這很棒。 這很有幫助。
網站主持人對此評論進行了最小化
假設我需要對“C”列和“D”列進行自動排序。 我將如何修改代碼以對兩列進行排序?
網站主持人對此評論進行了最小化
Weet niet of dit je inmiddels gelukt was, maar voor diegene die het ook nog zouden willen...
在 de Sub kun je gewoon meerdere keren het IF statement plaatsen, en dan komt het er als volgt uit te zien。
它已經消失了。 在 los van elkaar wilt doen met bepaalde waardes omdat je bijvoorbeeld met gegevensvalidatie werkt, dan moet je meerdere tabellen doen, omdat die waardes anders met elkaar mee verspringen。 (Ik had het nodig voor mijn losse gegevensvalidaties, ik heb een extra tablad aangemaakt waar alle gegevensvalidatielijsten staan​​)



Private Sub Worksheet_Change(ByVal Target As Range)
在錯誤恢復下一頁

If Not Intersect(Target, Range("A:A")) Is Nothing 那麼
Range("A1").Sort Key1:=Range("A2"), _
Order1:=xlAscending, Header:=xl是, _
OrderCustom:=1, MatchCase:=False, _
方向:=xlTopToBottom
如果結束

If Not Intersect(Target, Range("B:B")) 什麼都不是
Range("B1").Sort Key1:=Range("B2"), _
Order1:=xlAscending, Header:=xl是, _
OrderCustom:=1, MatchCase:=False, _
方向:=xlTopToBottom
如果結束

If Not Intersect(Target, Range("C:C")) Is Nothing 那麼
Range("C1").Sort Key1:=Range("C2"), _
Order1:=xlAscending, Header:=xl是, _
OrderCustom:=1, MatchCase:=False, _
方向:=xlTopToBottom
如果結束

If Not Intersect(Target, Range("D:D")) Is Nothing 那麼
Range("D1").Sort Key1:=Range("D2"), _
Order1:=xlAscending, Header:=xl是, _
OrderCustom:=1, MatchCase:=False, _
方向:=xlTopToBottom
如果結束

END SUB
網站主持人對此評論進行了最小化
你好。 絕妙的技巧,非常感謝。 在我的文件中,我有需要在單元格 A1 和 A2 中查看的重要信息。 因此,我已經穩定了所有單元格,我的值從 A3 開始到 A500。 當我執行這個 vba 時,我在單元格 A2 中的信息進入單元格 501。我怎樣才能讓它從單元格 A3 開始測距? 先感謝您!
網站主持人對此評論進行了最小化
第一行被排除在排序之外
網站主持人對此評論進行了最小化
我有同樣的問題,我發現了原因。 轉到第 5 行,(Order1:=xlAscending, Header:=xlYes, _)。 該腳本告訴 Excel 第一個單元格是標題,因此在進行排序時它將忽略它。 如果要包括第一行,請將其更改為以下行:


Order1:=xlAscending, Header:=xlNo, _
網站主持人對此評論進行了最小化
將代碼完全複製到我在 VBA 中的工作表中。 但是什麼都沒有發生我錯過了什麼嗎? 做了你所做的。
網站主持人對此評論進行了最小化
謝謝!!!
網站主持人對此評論進行了最小化
感謝代碼和邏輯。 當我們查看更大範圍的單元格時,上述邏輯不起作用,例如 Intersect(Target, Range("B:B,C:C,D:D"))。 我想如果列(B、C 或 D)中的任何單元格發生變化,則需要進行處理。
網站主持人對此評論進行了最小化
任何人都知道如何設置自動序列號。 對於 excel 工作表。 該數字應不包括所有標題和子標題,並且應在添加或刪除一行後自動重新排列。
網站主持人對此評論進行了最小化
嗨,
Kutools for Excel 提供了插入序列號功能,無論您插入多少次,它都可以插入唯一且連續的值。
比如第一次插入1,2,3,4;
此功能第二次會插入 5,6,7,8,9,10
此功能第三次將插入 11,12,...
網站主持人對此評論進行了最小化
雖然這是一個很棒的代碼,但我想知道是否有人可以幫助我讓它從上升到下降? 換句話說,我正在尋找它是頂部的最大數字和底部的最小數字
網站主持人對此評論進行了最小化
將 (Order1:=xlAscending, Header:=xlYes, ) 更改為 (Order1:=xlDescending, Header:=xlYes, )
網站主持人對此評論進行了最小化
您好,我是 Excel 中級用戶。 我想知道是否有人可以幫助指導我完成我想要完成的事情。 這是我想要做的:使用自定義訂單自動排序。

關於我的電子表格的一些信息:我有一張表(名為:Sheet1),其中列出了 16 列(A 到 P),目前有 19 行(隨著輸入更多數據,這個數字會增加)。 在最後一列(P 列)中,所有單元格都有一個選項下拉菜單(位於並從第二張表中拉出(名為“BackEnd”)。下拉選擇是用顏色編碼的(使用條件格式規則)。

我希望做什麼:當用戶在新行中輸入數據時,一旦他們從 P 列的下拉菜單中選擇了一個選項,Excel 就會自動將新行排序為特定順序。 我已經能夠創建用於按升序和降序自動排序的 VBA 代碼,但我無法創建用於按特定順序自動排序數據的代碼。 我希望數據排序的順序是:

反應遲鈍
不感興趣
有興趣
預篩選不合格:
預審合格
申請待定
申請批准
初步評估:
工作範圍:
正在進行房屋維修
等候接聽:
完成
其他:

這可能嗎? 任何幫助表示讚賞! 謝謝!
網站主持人對此評論進行了最小化
嗨,

將所有數據填充到特定列後,如何啟動此宏?
我希望在填充空框後啟動列表宏。 因為當我使用它時,它會突然改變地方。
在填充該列的最後一個數據後,我需要啟動這個宏(準確地說是 20 個數據)
網站主持人對此評論進行了最小化
如果您想成為主要排序的列中有一個公式,請問是否有一種方法可以使用此 VBA 代碼。

即如果 A2 = f2 + g2+ h2 和列 A 的總和需要按總和排序? (如果單元格中有公式,我無法讓 VBA 工作)

任何幫助都將不勝感激,因為希望將它用於排名比賽,當獲勝者是總共三場比賽的人時。

謝謝
網站主持人對此評論進行了最小化
我也想知道 Paula 問題的解決方案。 請分享
網站主持人對此評論進行了最小化
對我來說,它改變了這條線
If Not Intersect(Target, Range("B:B")) 什麼都不是
我認為關鍵是將目標範圍設置為更改的字段,並使用匯總結果對數據進行排序。
網站主持人對此評論進行了最小化
當單元格中有公式時,這對我有用:
Private Sub Worksheet_SelectionChange(ByVal Target As Range) Range("B1").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:= xlTopToBottom
END SUB
網站主持人對此評論進行了最小化
這真的很有幫助,但我有 2 行標題(第 1 行和第 2 行),當我運行 VBA 時,它會將第二行帶到日期的底部
我該如何阻止這個?
網站主持人對此評論進行了最小化
嗨,克里,

有一個 VBA 會自動對前兩個標題單元格的列中的單元格進行排序。

Private Sub Worksheet_Change(ByVal Target As Range)
將 xIntRC 調暗為整數
將 xURg 調暗為範圍
在錯誤恢復下一頁
If Not Intersect(Target, Range("B:B")) 什麼都不是
If Not Intersect(Target, Range("B1:B2")) is nothing 然後退出 Sub
設置 xURg = ActiveSheet.UsedRange
xIntRC = xURg.Rows.count
Range("B2:B" & xIntRC).Sort Key1:=Range("B3"), _
Order1:=xlAscending, Header:=xl是, _
OrderCustom:=1, MatchCase:=False, _
方向:=xlTopToBottom
如果結束
END SUB
網站主持人對此評論進行了最小化
您好,我對“kellytte”上方的代碼沒有任何運氣,用於對列中的單元格進行排序,而忽略了前兩個標題單元格。 誰能幫我? 謝謝。
網站主持人對此評論進行了最小化
Hithis 代碼解決了我的問題。 但我需要對 B 列進行排序,只需更改 A 列,而不是全部。 幫助請
網站主持人對此評論進行了最小化
嗨,它排列了整行,但我在單元格上有一些鏈接到特定文件夾中,該文件夾在排序後留下。
網站主持人對此評論進行了最小化
因此,當手動輸入數據​​時這似乎有效,但當它是從另一個文件重新填充的表時不起作用......有沒有辦法做到這一點?
網站主持人對此評論進行了最小化
驚人的感謝!!!
網站主持人對此評論進行了最小化
嗨,
這是非常有用的。
有沒有辦法擴展公式以覆蓋多列? 例如,要先根據 B 列和 C 列的值對數據進行排序?我真的很感激任何解決方案!
網站主持人對此評論進行了最小化
嗨,
這是非常有用的。
有沒有辦法擴展公式以覆蓋多列? 例如,要先根據 B 列和 C 列的值對數據進行排序?
我真的很感激任何解決方案!
這裡還沒有評論
載入更多
留下你的意見
以訪客身份發帖
×
評價此帖子:
0   字符
推薦地點

關注我們

版權所有©2009 - 萬維網。extendoffice.com。 | 版權所有。 供電 ExtendOffice。 |
Microsoft和Office徽標是Microsoft Corporation在美國和/或其他國家的商標或註冊商標。
受Sectigo SSL保護