Excel公式,以查找单元格中的第一个非alpha字符?

时间:2009-10-01 21:00:38

标签: excel excel-formula

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

我已将数据导入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”

之后找到第一个非alpha字符

这可能吗?

2 个答案:

答案 0 :(得分:1)

详细了解数组公式如何工作(@ Jacob的公式似乎在某些情况下略有错误,例如0表示“A1A”),所以这就是我认为的工作版本,扩展为了方便阅读。请告诉我任何不起作用的例子。

=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函数,MID函数又生成一个数组{* char_1 *,* char_2 *,...,* char_n *}。
  3. 将数组乘以1,以防止在后续步骤中将数字字符解析为文本。这也可以使用VALUE()。
  4. 来完成
  5. 然后传递给ISNUMBER()函数,该函数输出逻辑值数组。
  6. 这是传递给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)))
    
            )
        )
    )
    

答案 1 :(得分:0)

On this page有一个数组公式,用于查找“字符串中第一个数字的位置”。你应该可以修改它来使用'T'功能(确定一个字符是否是文本),加入一点减法,然后找到你想要的东西。