在Excel问题中sorting值

我有一个基于“项目编号”列进行sorting的电子表格。 所以,如果项目号码列有以下值:

2.2 2.1.b 

我希望2.1.b的行在2.2行之前。 但是,Excel中的sortingfunction提前2.2。 它必须根据字符数确定值。

有没有办法对VBA中的列进行sorting?

这可以通过创build一个“自定义列表”,然后在该列表上sorting,很容易地在Excel中完成。

自定义列表允许您创build自己的默认sorting顺序。 您可以创build一个新的自定义列表,如下所示:“0,1,2,3,4,5,6,7,8,9,…,a,b,c,d,e,f,g,h,i, J,K,L,M,N,O,p,q,R,S,T,U,v,W,X,Y,Z”。 如果你的sorting需要更多的逻辑,你可以添加到这个。

然后,这个新名单将按照数字先sorting,然后是一个字母。

你创build列表,当第一次sorting时select“自定义sorting”,select你的新列表,你就完成了。 现在,当您sorting时,数据将根据您的新标准进行sorting。

你不需要使用代码来做到这一点 – Excel支持这个内置的:

  1. 将整列的“数字格式”格式设置为文本,而不是一般格式。
  2. 您将不得不重新input以前input的任何数字条目。

作为步骤2的替代方法(如果您已有许多先前存在的条目),则可以使用TEXT函数并对该列进行sorting,或者使用复制粘贴值来覆盖原始列值。

我在Excel 2007中testing了这个,但是我确信这个行为已经存在了一段时间了。

如果您用撇号前缀每个值,这将向Excel表明该值是文本而不是数字。

至less这是理论。

对于试图修复看起来像数字的文本,Excel非常激进。 它会在每个单元格上显示一个数字格式为“duh!”的数字,然后select“忽略错误”(没有“这不是一个真正的数字”选项)。

然后将数字格式从“常规”更改为“文本”,只是为了好的措施。

然后,当你尝试分类时,它会再次尝试握住你的手,并修复你的“错误”。 通过select“分开存储为文本的数字和数字”,你可以做到你想要的。 (没有“这是所有[adjectival阐明]文本,[interjective explicative]!”选项,悲哀地)。

我会添加一个带有公式的隐藏列来将2.1.b格式转换为更简单,可sorting的数值,如10000*(first digit) + 100*(second digit) + (ascii(letter) - 'a') +100 10000*(first digit) + 100*(second digit) + (ascii(letter) - 'a') , where:first digit = 10000*NUM(SUBSTRING(A1;FIND(".", A1)) …等