我有一个大型数据表,其顶部有日期。这已打开过滤器。我需要根据输入到用户定义字段的日期对这些数据(最大到最小)进行排序。但我不知道如何使这种动态。
所以说我有12个列,每个月在顶部,然后是一组数字。如果我将二月输入特定单元格,那么我希望excel按照colum Feb从大到小排序。如果我然后将Feb单元格更改为May,我希望它对May数据进行排序
请帮忙
我有一个大型数据表,其顶部有日期。这已打开过滤器。我需要根据输入到用户定义字段的日期对这些数据(最大到最小)进行排序。但我不知道如何使这种动态。
所以说我有12个列,每个月在顶部,然后是一组数字。如果我将二月输入特定单元格,那么我希望excel按照colum Feb从大到小排序。如果我然后将Feb单元格更改为May,我希望它对May数据进行排序
请帮忙
Answers:
据我了解,你有一套月度数据,我将假设从1月到12月,每个月的数据列在一个单独的列和一个标题单元格中。您希望能够根据特定月份中的最大值到最小值对此数据集进行排序,并将条目选择的月份放入工作表中的单元格中。
虽然可以使用工作表公式生成数据集中值的排序显示,但数据集本身不会被排序,并且需要不过滤。
使用VBA将允许一种相当简单的方法,其具有能够处理过滤数据的额外好处。
我假设按月排序的条目将在单元格中 A1
,已被命名 sort_month
。数据(包括月份名称标题)位于列中 B
- M
。数据范围已命名 filtered_data
;在我的示例数据中,这是范围 B1:M25
。
将进行排序的VBA代码非常简短:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not (Intersect(Target, Range("sort_month")) Is Nothing) Then
Dim theMonth As Long
theMonth = month(DateValue("01-" & Range("sort_month").Value & "-1900"))
Range("filtered_data").Sort Key1:=Cells(1, theMonth + 1), _
Order1:=xlDescending, header:=xlYes
End If
End Sub
无论何时进行更改,此子例程都将自动运行 sort_month
(即细胞 A1
)。在此单元格上设置数据验证是有意义的,以确保只能在此单元格中输入有效的月份名称(“Jan”,“Feb”等)。
代码不应放在标准VBA模块中,而应附加到工作表上。右键单击工作表的选项卡并选择“查看代码”,即可访问工作表的代码窗格。然后可以将代码粘贴到窗格中。
虽然它可能超出您的需要,但可以轻松设置可排序表以供一般(即非开发人员)使用。下面显示的版本具有月份条目的下拉数据验证,为了可读性而添加的表格格式以及用于突出显示排序列的条件格式。