1

有没有办法在 Excel 中使用单元格公式来查找引用单元格中第一个非字母字符的索引?

我已将数据导入 Excel,其中有一列如下所示:

<some text I don't want in the derived cell><some text that prepends the text I want and is always constant>TheTextIWant<Some non-alpha character><some other characters that may be alpha or not>

我正在尝试创建一个到目前为止看起来像这样的公式:

=MID(<cell reference>, SEARCH("<prepended text>, <cell reference>) + <length of prepended text>, ??)

在哪里 ??是一些在“TheTextIWant”之后找到第一个非字母字符的子公式

这可能吗?

4

2 回答 2

1

要更详细地了解数组公式的工作原理(@Jacob 的公式在某些情况下似乎有点错误,例如“A1A”为 0),所以这是我认为的工作版本,为了便于使用而扩展阅读。请让我知道它不起作用的任何示例。

=IF(
    LEN(A1)=0
    ,0
    ,MIN(
        IF(
            ISNUMBER(
                1*MID(
                    A1,
                    ROW(INDIRECT("A1:A"&LEN(A1))),
                    1
                )
            ),
            ROW(INDIRECT("A1:A"&LEN(A1))),
            LEN(A1)+1
        )
    )
)
  1. 其核心是 row() 函数,它在数组模式下对范围 a1:a*n* 中的每个单元格进行一次评估,其中n是单元格 A1 中字符串的长度,创建一个数组 { 1,2,..., n }。
  2. 该数组被传递给 MID 函数,该函数又生成一个数组 {*char_1*,*char_2*,...,*char_n*}。
  3. 数组乘以 1 以防止在后续步骤中将数字字符解析为文本。这也可以使用 VALUE() 来完成。
  4. 然后将其传递给 ISNUMBER() 函数,该函数输出一个逻辑值数组。

这是传递给 IF的条件数组。然后通过重复步骤 1 构建第二个数组,其中包含每个字符的位置。IF 函数在数组模式下产生一个输出数组。条件为 TRUE 的情况被设置为字符位置数组中的相应值,其余的都设置为 LEN(A1)+1,因此它们大于任何数字字符的任何可能位置值。

然后 MIN 函数计算 IF 输出的数组,返回最小值,即单元格 A1 中字符串中第一个数字字符的位置。如果单元格中没有文本,最外面的 IF 函数强制公式返回 0,而不是 1;否则,INDIRECT 返回 #REF!搜索单元格A0时出错,向上传播,IF返回FALSE条件,返回0+1=1。

要改为搜索第一个非数字字符的位置,您所要做的就是将第二个 2 个参数的顺序反转为 IF:

=IF(
    LEN(A1)=0
    ,0
    ,MIN(
        IF(
            ISNUMBER(
                1*MID(
                    A1,
                    ROW(INDIRECT("A1:A"&LEN(A1))),
                    1
                )
            ),
            LEN(A1)+1,
            ROW(INDIRECT("A1:A"&LEN(A1)))

        )
    )
)
于 2012-03-04T22:48:50.697 回答
0

在此页面上,有一个用于查找“字符串中第一个数字的位置”的数组公式。您应该能够修改它以使用“T”函数(以确定字符是否为文本),加入一点减法,然后得到您要查找的内容。

于 2009-10-01T21:29:26.203 回答