=IF(MID(B3,ROW(A:A),1)=MID(B3,LEN(B3)+1-ROW(A:A),1),"T")
我使用上述公式读取单元格 B3 中的回文,它工作正常(如果找到没有标点符号和空格的回文)。但当我尝试读取带有标点符号和空格的回文时,它读取效果不佳。
例如:-
B3:lol---->回文 B3:l ol---->回文 ........(但由于 l 和 ol 之间有空格,因此它不应该是回文)
我不明白我的公式中遗漏了哪些点?有人能帮我把公式通用化吗?谢谢!
问候,
答案1
您当前的公式存在几个大问题,因此当我听到您宣称它“运行良好”时我感到非常惊讶。
首先,没有外部函数作用于 IF 语句。因此,除了比较产生的数组中的第一个元素之外,其他所有元素都会被考虑。实际上,如果字符串中的第一个字母与最后一个字母匹配,则公式将返回“T”:就此表达式而言,字符串中的所有其他字母都是完全多余的。根据您的公式,诸如 ABCDEA 之类的字符串被视为回文。这也是为什么您的示例“L OL”返回“T”的原因 - 中间字符根本不重要。
其次,您要输入一个数组公式,其中一整列的条目被传递给 ROW 函数以生成要作为 MID 传递的数组起始编号参数。这不仅意味着 Excel 必须生成一个包含超过一百万个元素的数组(需要惊人且不必要的资源量),而且还意味着您的第二个数组将包含成千上万个负值,这当然会在传递给 MID 时导致错误。
尝试:
=IF(SUMPRODUCT(N(MID(B3,ROW(INDEX(A:A,1):INDEX(A:A,LEN(B3))),1)<>MID(B3,LEN(B3)+1-ROW(INDEX(A:A,1):INDEX(A:A,LEN(B3))),1)))=0,"T","")
问候