Excel 2010过滤动态


0

我有一个大型数据表,其顶部有日期。这已打开过滤器。我需要根据输入到用户定义字段的日期对这些数据(最大到最小)进行排序。但我不知道如何使这种动态。

所以说我有12个列,每个月在顶部,然后是一组数字。如果我将二月输入特定单元格,那么我希望excel按照colum Feb从大到小排序。如果我然后将Feb单元格更改为May,我希望它对May数据进行排序

请帮忙


1
你的意思是你需要一个列式排序?
chuff

1
“根据输入的日期对数据进行排序”究竟如何?
Karan

所以说我有12个列,每个月在顶部,然后是一组数字。如果我将二月输入特定单元格,那么我希望excel按照colum Feb从大到小排序。如果我然后将Feb单元格更改为May,我希望它对May数据进行排序
simon

你有什么尝试和/或研究过的?您使用的是哪个版本的Excel?是对整个表格还是仅对特定列进行排序所需的效果?
CharlieRB

Answers:


1

据我了解,你有一套月度数据,我将假设从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模块中,而应附加到工作表上。右键单击工作表的选项卡并选择“查看代码”,即可访问工作表的代码窗格。然后可以将代码粘贴到窗格中。

虽然它可能超出您的需要,但可以轻松设置可排序表以供一般(即非开发人员)使用。下面显示的版本具有月份条目的下拉数据验证,为了可读性而添加的表格格式以及用于突出显示排序列的条件格式。

formatted sortable table

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.