Excel 数据透视表中的日期排序
Date Sorting in Excel PivotTables
我有一个数据透视表,其中有一个日期字段,将其命名为 Mydate。
我已将其作为列标签,然后按年、月和日对标签进行分组。
然后我通过单击标签然后选择“从新到旧排序”将年份和日期倒序排列。
如果我随后展开月份以显示日期,然后尝试对日期进行排序,排序就会一团糟....它将 10 天以上的日期视为第 2、3 天等之前
这是行标签部分中的样子:
-2015
-Apr
9-Apr
8-Apr
...
2-Apr
1-Apr
16-Apr
15-Apr
...
有什么方法可以在数据透视表中解决这个问题,还是我需要创建一个额外的 "Day" 列才能使其正常工作?
编辑:这些被正确存储为日期,如果我取消日期字段的分组然后仅对没有年或月的日期进行排序,则排序工作正常。
简短:
如果我们使用 Excel 的默认排序机制对数据透视表 table 数据字段进行排序,数据透视表 table 字段中的日期将以文本方式而不是日期方式进行排序。如果一天只有一位数字,则按日期排序将不正确。日期是否只有一位,只取决于Windows的区域设置,而不取决于Excel.
中的日期格式
长:
我们在 Windows 的区域设置中使用短日期格式,一天只有一位数字。 Control Panel
- Clock, Language, and Region
- Region and Language
:
这是德国人Windows。在英语中 Windows 例如 m/d/yy
。
现在我们有 Excel 这样的数据。
请注意 Excel 的日期格式为 mm/dd/yyyy
。
我们创建一个枢轴 table 并按年、月和日对其进行分组。如果我们对日期进行排序,它们将以文本方式排序。这将按日期排序。
现在我们将 Windows 区域设置中的短日期格式更改为使用两位数字表示日期。
同样,这是德国人 Windows。在英语中 Windows 例如 mm/dd/yyyy
。
然后我们刷新枢轴 table。现在它将按日期正确排序。但它总是 nor 以文本方式排序。
Axel 的回答有效,但如果您打算将工作表发送给其他用户,您可能不知道他们是否更新了设置。
这是通过 VBA 执行此操作的代码:
Private Declare Function SetLocaleInfo _
Lib "kernel32" Alias "SetLocaleInfoA" ( _
ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String) As Boolean
Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()
Private Const LOCALE_SSHORTDATE = 31
Private Sub ChangeSettingExample()
'change the setting of the character displayed as the decimal separator.
Call SetLocalSetting(LOCALE_SSHORTDATE, "MM/dd/yy") 'to change to proper format
'check your control panel to verify or use the
'GetLocaleInfo API function
End Sub
Private Function SetLocalSetting(LC_CONST As Long, Setting As String) As Boolean
Call SetLocaleInfo(GetUserDefaultLCID(), LC_CONST, Setting)
End Function
注意:我修改了此处找到的代码:Control Windows Regional Settings 用户 Tom Schreiner
我有一个数据透视表,其中有一个日期字段,将其命名为 Mydate。
我已将其作为列标签,然后按年、月和日对标签进行分组。
然后我通过单击标签然后选择“从新到旧排序”将年份和日期倒序排列。
如果我随后展开月份以显示日期,然后尝试对日期进行排序,排序就会一团糟....它将 10 天以上的日期视为第 2、3 天等之前
这是行标签部分中的样子:
-2015
-Apr
9-Apr
8-Apr
...
2-Apr
1-Apr
16-Apr
15-Apr
...
有什么方法可以在数据透视表中解决这个问题,还是我需要创建一个额外的 "Day" 列才能使其正常工作?
编辑:这些被正确存储为日期,如果我取消日期字段的分组然后仅对没有年或月的日期进行排序,则排序工作正常。
简短: 如果我们使用 Excel 的默认排序机制对数据透视表 table 数据字段进行排序,数据透视表 table 字段中的日期将以文本方式而不是日期方式进行排序。如果一天只有一位数字,则按日期排序将不正确。日期是否只有一位,只取决于Windows的区域设置,而不取决于Excel.
中的日期格式长:
我们在 Windows 的区域设置中使用短日期格式,一天只有一位数字。 Control Panel
- Clock, Language, and Region
- Region and Language
:
这是德国人Windows。在英语中 Windows 例如 m/d/yy
。
现在我们有 Excel 这样的数据。
请注意 Excel 的日期格式为 mm/dd/yyyy
。
我们创建一个枢轴 table 并按年、月和日对其进行分组。如果我们对日期进行排序,它们将以文本方式排序。这将按日期排序。
现在我们将 Windows 区域设置中的短日期格式更改为使用两位数字表示日期。
同样,这是德国人 Windows。在英语中 Windows 例如 mm/dd/yyyy
。
然后我们刷新枢轴 table。现在它将按日期正确排序。但它总是 nor 以文本方式排序。
Axel 的回答有效,但如果您打算将工作表发送给其他用户,您可能不知道他们是否更新了设置。
这是通过 VBA 执行此操作的代码:
Private Declare Function SetLocaleInfo _
Lib "kernel32" Alias "SetLocaleInfoA" ( _
ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String) As Boolean
Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()
Private Const LOCALE_SSHORTDATE = 31
Private Sub ChangeSettingExample()
'change the setting of the character displayed as the decimal separator.
Call SetLocalSetting(LOCALE_SSHORTDATE, "MM/dd/yy") 'to change to proper format
'check your control panel to verify or use the
'GetLocaleInfo API function
End Sub
Private Function SetLocalSetting(LC_CONST As Long, Setting As String) As Boolean
Call SetLocaleInfo(GetUserDefaultLCID(), LC_CONST, Setting)
End Function
注意:我修改了此处找到的代码:Control Windows Regional Settings 用户 Tom Schreiner