答案1
对文本进行排序时,Excel 会查看可使用CODE
函数获取的字符代码。 CODE(".")
返回 46 而CODE("0")
为 48,因此第 3 位的文本"."
被视为小于"0"
相同位置的字符串。
要对字符串的数字部分进行排序,您需要一个与字符串相邻的辅助列。在 B1 中输入以下公式:
=VALUE(LEFT(A1,FIND(".",A1)-1))
该VALUE
函数将LEFT
之前找到的所有内容转换"."
为数字,然后按正确的数字顺序排序,以便 12 小于 118。
答案2
对于“然后”的解决方案,可以使用函数REPLACE()
来完成艰苦的工作:
=VALUE(REPLACE(A1,FIND(".",A1),LEN(A1),""))
REPLACE()
这样使用比单独使用slightly
更具扩展性LEFT()
。例如,与使用 aLEFT()
和 aRIGHT()
来从两端获取位,然后将它们重新组合在一起相比,只需稍微调整一下REPLACE()
插入多少个字符的位置就可以很好地完成任务。
它在 A1 中查找,在其中搜索句点字符(位于图像中重要的数字部分之后),并将其替换为非字符""
。它使用FIND()
进行定位,将其数值作为其自身替换的起始位置。它需要一个要使用的替换字符数的值,我们使用 来LEN()
告诉它替换与原始字符相同的字符数。
因此,我们最终得到了示例所需的数字部分加上一定数量的......什么都没有......因为""
没有在字符串中添加任何字符。
此时它是一个字符串,因为它REPLACE()
是一个字符串函数,并且 Excel 假定您想要一个字符串作为输出。用 将其全部包装起来VALUE()
会将类型更改为数字。
数字排序正确,例如“12”将排在“118”之前。
请注意,由于您只使用这些值进行排序,因此如果您不使用该VALUE()
函数,则内容仍将看起来像数字,如果您能记得在排序时做出正确的选择,并且 Excel 会为您提供“排序警告”对话框,那么您可以直接使用它。当然,您必须始终记住并且永远不会忘记,但它会很好用。但是,既然添加没有任何成本VALUE()
,为什么不使用它呢?
顺便说一句,没有辅助列就无法做到这一点。可以做很多事情,但最终还是要进行排序,并且需要这些值来对排序进行排序。Excel 只在排序功能本身中提供了这种选择,因此必须有实际的单元格,而不是命名范围来引用。
即使是“现代”(2021)使用该SORT()
函数的能力,也SORTBY()
无济于事,因为这只是按顺序生成一个不错的列表,但是……它会在某个地方生成它,这相当于使用辅助列。所以一个有六个,另一个有六个。
要进行无辅助列(某种类型的)的现场排序,您需要 VBA。这样效果会很好。但需要一个宏来“现场”执行此操作,而不是 UDF。