我有一个数据透视表,里面有一个日期字段,称之为Mydate。
我已将其作为列标签,然后按年,月和日对标签进行分组。
然后,我点击标签,然后选择Sort New to Oldest,将年份和日期按相反的顺序排列。
如果我然后扩展月份以显示日期然后尝试对日期进行排序,那么排序就搞砸了....它将10日以上的日子视为第2,3天之前的日子等。
以下是行标签部分的内容:
-2015
-Apr
9-Apr
8-Apr
...
2-Apr
1-Apr
16-Apr
15-Apr
...
有没有办法在数据透视表中修复此问题,还是需要另外添加“日期”列才能使其正常工作?
编辑:如果我取消组合日期字段,然后只对没有年份或月份的日期进行排序,它们会正确存储为日期并且排序正常工作。
答案 0 :(得分:1)
短: 如果我们使用Excel的默认排序机制对数据透视表数据字段进行排序,则数据透视表字段中的日期将以文本方式排序,而不是以日期方式排序。如果当天只有一位数字,则按日期排序顺序不正确。当天是否只有一位数字,仅取决于Windows的区域设置,而不取决于Excel中的日期格式。
长:
我们在Windows的区域设置中使用短日期格式,当天只有一位数。 Control Panel
- Clock, Language, and Region
- Region and Language
:
这是德国的Windows。在英语Windows中,例如m/d/yy
。
现在我们有这样的Excel数据。
请注意,Excel的日期格式为mm/dd/yyyy
。
我们按年,月和日创建一个数据透视表和组。如果我们按日期排序,他们将以文本方式排序。按日期排序顺序不正确。
现在我们将Windows的区域设置中的短日期格式更改为当天的两位数。
同样,这是德国的Windows。在英语Windows中,例如mm/dd/yyyy
。
我们刷新数据透视表。现在按日期顺序排列。但它总是以文本方式排序。
答案 1 :(得分:0)
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
注意:我修改了此处的代码:用户Tom Schreiner的Control Windows Regional Settings