![在 Excel 中按特定值进行自定义排序](https://linux22.com/image/1573670/%E5%9C%A8%20Excel%20%E4%B8%AD%E6%8C%89%E7%89%B9%E5%AE%9A%E5%80%BC%E8%BF%9B%E8%A1%8C%E8%87%AA%E5%AE%9A%E4%B9%89%E6%8E%92%E5%BA%8F.png)
首先,我已经搜索过,但如果我错过了这个问题的答案,我很抱歉。
我正在尝试按括号中的数字对列进行排序。例如,我想将下面的 A 列排序为类似于 B 列。
(好吧,没有足够代表性的图像)
A 列
姓氏 (1)
姓氏 (1)
姓氏 (3)
姓氏 (1)
姓氏 (1)
姓氏 (14)
姓氏 (1)
姓氏 (21)
姓氏 (1)
B 列
姓氏 (21)
姓氏 (14)
姓氏 (3)
姓氏 (1)
姓氏 (1)
...等等。
感谢您的帮助!
有人能提供一步一步如何做到这一点吗?假设这是可行的。我用的是 '07,但如果这很重要的话,我也有 '16。
答案1
要按列中值的一部分进行排序,首先需要将要排序的部分放入其自己的列中。假设 FirstName 或 Lastname 中没有括号,这很容易。我将在单独的列中为您提供这些步骤,尽管它们可以轻松合并。还请注意,在以下步骤中,我们位于第 1 行。
在 B 列中,使用 FIND 函数找到左括号的位置,具体如下
=FIND("(",$A1)
在您的示例中 - “Firstname Lastname (21)” - 其计算结果为 20,因为左括号是第 20 个字符。
在 C 列中,找到右括号的位置
=FIND(")",$A1)
现在使用 MID 函数提取括号中的内容。MID 函数从您指定的位置开始返回文本字符串中特定数量的字符。如果您不习惯使用文本字符串,请暂停考虑 (a) 您需要从左括号右侧的一个字符开始 (IE一加上您在 B 列中计算的值,并且 (b) 您要提取的字符数等于一较少的比 C - B。因此 D 列将显示
=MID($A1,$B1+1,$C1-$B1-1)
如果您真的尝试对 D 列进行排序,您很快就会发现数字的排序方式与您预期的不一样。这是因为 Excel 仍将它们视为文本字符串,因此将“100”视为“21”之前。因此,在 E 列中,将 D 列包装在将文本转换为数字的函数 (NUMBERVALUE) 中,如下所示:
=NUMBERVALUE($D2)
现在,您可以对 E 列进行排序。(显然,您可以将上述任何或所有步骤合并为一个步骤。如果是我,我可能会将两个 FIND 保留在各自的列(B 和 C)中,但将最后两个步骤合并为
`=NUMBERVALUE(MID($A1,$B1+1,$C1-$B1-1))`
请注意,我理解您的问题是,即使姓名不同,您也希望按括号中的数字排序。换句话说,无论 Firstname Lastname 是 Abigail Adams 还是 Zev Zeebra,您都希望后面跟着 (21) 的列位于后面跟着 (10) 的列之前。如果不是这种情况,您可以使用类似的技术(可能使用“LEFT”函数而不是“MID”来创建仅包含姓名的单独列。然后先对该列进行排序,然后再对上面生成的列进行排序。
答案2
您需要将数字提取到新列中,然后按该列对数据进行排序。
=MID(A2,FIND("(",A2),5)
如果您的数字超过 4 位,请将 5 更改为更大的值。
首先,此公式将返回括号中的数字,如(14)
。无论如何,我们都需要删除括号,因此我们不妨直接返回14)
不带左括号的数字。可以使用
=MID(A2,FIND("(",A2)+1,5)
现在我们可以通过用空文本替换右括号来删除它""
。
=SUBSTITUTE(MID(A2,FIND("(",A2)+1,5),")","")
结果是14
看起来像数字,但它是文本。我们需要使用 Value 函数将其转换为数字:
=VALUE(SUBSTITUTE(MID(A2,FIND("(",A2)+1,5),")",""))
将该公式复制下来,然后按公式所在的列排序。