在 Excel 中按特定值进行自定义排序

在 Excel 中按特定值进行自定义排序

首先,我已经搜索过,但如果我错过了这个问题的答案,我很抱歉。

我正在尝试按括号中的数字对列进行排序。例如,我想将下面的 A 列排序为类似于 B 列。

(好吧,没有足够代表性的图像)

A 列

姓氏 (1)

姓氏 (1)

姓氏 (3)

姓氏 (1)

姓氏 (1)

姓氏 (14)

姓氏 (1)

姓氏 (21)

姓氏 (1)

B 列

姓氏 (21)

姓氏 (14)

姓氏 (3)

姓氏 (1)

姓氏 (1)

...等等。

感谢您的帮助!

有人能提供一步一步如何做到这一点吗?假设这是可行的。我用的是 '07,但如果这很重要的话,我也有 '16。

答案1

要按列中值的一部分进行排序,首先需要将要排序的部分放入其自己的列中。假设 FirstName 或 Lastname 中没有括号,这很容易。我将在单独的列中为您提供这些步骤,尽管它们可以轻松合并。还请注意,在以下步骤中,我们位于第 1 行。

  1. 在 B 列中,使用 FIND 函数找到左括号的位置,具体如下

    =FIND("(",$A1)

在您的示例中 - “Firstname Lastname (21)” - 其计算结果为 20,因为左括号是第 20 个字符。

  1. 在 C 列中,找到右括号的位置

    =FIND(")",$A1)

  2. 现在使用 MID 函数提取括号中的内容。MID 函数从您指定的位置开始返回文本字符串中特定数量的字符。如果您不习惯使用文本字符串,请暂停考虑 (a) 您需要从左括号右侧的一个字符开始 (IE一加上您在 B 列中计算的值,并且 (b) 您要提取的字符数等于一较少的比 C - B。因此 D 列将显示

    =MID($A1,$B1+1,$C1-$B1-1)

  3. 如果您真的尝试对 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),")",""))

将该公式复制下来,然后按公式所在的列排序。

在此处输入图片描述

相关内容