帕特(Pat)想知道是否有一种方法,可以在她每次向工作表中添加新数据时自动进行排序。帕特(Pat)认为,例如,当她将新名称添加到名称列表中时,这些名称会自动按照顺序进行排序,这是很好的。

可以做到这一点的唯一方法是使用一个在工作表中输入新内容时触发的宏。例如,您可以将宏添加到工作表的代码中,该宏在工作表中的某些内容发生更改时触发。 (您可以通过右键单击工作表选项卡,然后从出现的上下文菜单中选择“查看代码”来查看代码窗口。)以下是一个这样的简单宏的示例:

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next     Range("A1").Sort Key1:=Range("A2"), _       Order1:=xlAscending, Header:=xlYes, _       OrderCustom:=1, MatchCase:=False, _       Orientation:=xlTopToBottom End Sub

该宏假定您要对A列中的数据进行排序,并且单元格A1中有一个标题。如果名称在不同的列中,则只需将单元格A2引用更改为不同的列,例如B2,C2等。

当然,在进行任何更改时随时进行排序可能会很麻烦。

您可能希望限制排序的时间,以便仅在对数据的特定部分进行更改时才进行排序。以下版本的宏仅在对A列进行更改时才对数据进行排序。

Private Sub Worksheet_Change(ByVal Target As Range)

On Error Resume Next     If Not Intersect(Target, Range("A:A")) Is Nothing Then         Range("A1").Sort Key1:=Range("A2"), _           Order1:=xlAscending, Header:=xlYes, _           OrderCustom:=1, MatchCase:=False, _           Orientation:=xlTopToBottom     End If End Sub

使用宏自动对数据进行排序有一些缺点。首先,由于您使用宏进行排序,因此该操作本质上是“最终的”。换句话说,排序后,您不能使用Ctrl + Z撤消操作。

第二个缺点是数据输入可能会有点令人不安。

例如,如果您使用上述宏中的任何一个,并且开始将名称放入工作表中,则在您完成A列中的内容后,它们就会被排序。如果您的数据使用了五列,那么您在第15行中开始输入,一旦完成将名称输入到A列中(在将数据输入到B到E列中之前),您的数据就会按照正确的顺序排序。这意味着您将需要找到它在排序中的移动位置,在B列中选择适当的单元格,然后为记录输入其余数据。当然,解决此问题的方法是以不自然的顺序添加数据-只需确保A列中的名称是您为记录输入的最后一句话。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(9005)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:

链接:/ excelribbon-Automatically_Sorting_as_You_Enter_Information [输入信息时自动排序]。