我需要找到 Excel 字符串中第一个大写字符的位置。网络上有很多资源对此有相同(或实际上相同)的解决方案:
=MIN(IF(ISERROR(FIND(CHAR(ROW(INDIRECT("65:90"))),A1)),"",FIND(CHAR(ROW(INDIRECT("65:90"))),A1)))
但是,这是函数的一种不寻常用法。我找不到关于它到底做什么和如何工作的解释。当我自己使用这个公式时,它似乎不起作用。
有人可以解释一下这个公式如何运作,以便我能弄清楚我可能做错了什么吗?
笔记:修订版 2包括我自己的答案。原始版本被搁置了,我猜想主要问题是我将答案放在了帖子的“问题”部分。如果问题被搁置,我会将答案改为答案并删除此注释。
答案1
为了简化数组公式背后的机制来返回字符串中第一个大写字母的位置,我使用了一个简单的公式来帮助您实现该方法。
{=MATCH(1,(CODE(MID(B2,ROW($A$1:$A$255),1))<=90)*(CODE(MID(B2,ROW($A$1:$A$255),1))>=65),FALSE)}
公式如何运作:
- 因为它是一个数组公式,所以需要用 来结束它
Control+Shift+Enter
。 - 公式假定大写字母不会超过 255 个字符。
- 和
Match
,1 is for TRUE
。 CODE(MID(B2,ROW($A$1:$A$255),1))
,返回组成字符串的 ASCII 字符数组,返回一个 255 个元素的数组。
假设B2
值为TxtDate
。
- 然后公式返回,
{84;120;116;68;97;116;101}
。
CODE(MID(B2,ROW($A$1:$A$255),1))<=90
,返回一个数组TRUE
,并FALSE
根据 ASCII 码是否小于或等于 90 来判断,其中 90 是大写字母 Z 的 ASCII 码,并将返回,
{TRUE;FALSE;FALSE;TRUE;FALSE;FALSE;FALSE}
这里第一个字母T
的 ASCII 码小于 90。
公式的第三部分检查大于或等于 65 的 ASCII 码,其中 65 代表大写字母 A,返回类似的数组,然后将其乘以第一个数组。
在 Excel 中,FALSE
相当于zero
且TRUE
等于one
。公式将这些数组集合相乘后,会得到一个 数组Ones & Zeros
。如下所示。
{1;0;0;1;0;0;0}
显示,位置 1 和 4 为大写字母。现在公式使用 来MATCH function
查找数组中的第一个大写字母并返回1
。
我确实相信上面的例子和解释将帮助您理解公式的工作原理。