date在Excel数据透视表中sorting

我有一个数据透视表中有一个date字段,称之为Mydate。

我已经把它作为一个专栏标签,然后按年,月和日分组。

然后,我通过点击标签,然后selectsorting最新到最旧,以相反的顺序放置这些年份和日子。

如果我再扩大月份来显示日子,然后尝试整理日子,那么sorting就会搞砸了……它把10以上的日子视为在第2,3天之前。

下面是行标签部分的样子:

-2015 -Apr 9-Apr 8-Apr ... 2-Apr 1-Apr 16-Apr 15-Apr ... 

有没有办法在数据透视表中解决这个问题,或者是否需要额外添加“日”列以使其正常工作?

编辑:这些被正确存储为date和sorting工作正常,如果我取消组合date字段,然后sorting只有没有几年或几个月的date。

Short:如果我们使用Excel的默认sorting机制对数据透视表数据字段进行sorting,则数据透视表字段中的date按文本方式进行sorting,而不是按date方式sorting。 如果当天只有一位数字,则按date顺序不会是正确的。 当天是否只有一位数字,仅取决于Windows的区域设置,而不取决于Excel中的date格式。

长:在Windows的语言环境设置中,我们有短date格式,只有一天的一个数字。 Control PanelClock, Language, and RegionRegion and Language

在这里输入图像说明

这是一个德国的Windows。 在英文Windows中,例如m/d/yy

现在我们有这样的Excel数据。

在这里输入图像说明

请注意Excel的date格式是mm/dd/yyyy

我们按年,月和日创build数据透视表和组。 如果我们按照文本的方式对date进行sorting。 这将不会按date正确的顺序。

在这里输入图像说明

现在,我们将Windows的区域设置中的短date格式更改为一天中的两位数字。

在这里输入图像说明

再次,这是一个德国的Windows。 在英文Windows中,例如,将是mm/dd/yyyy

我们刷新数据透视表。 现在按date排列顺序。 但它总是不以文本的方式sorting。

在这里输入图像说明

阿克塞尔的答案是有效的,但是如果你打算把工作表发送给其他用户,你可能不知道他们是否更新了他们的设置。

这是通过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 

注意:我修改了这里find的代码:用户Tom Schreiner 控制Windows区域设置