我的单元格包含!后跟长度不同的字母数字字符串。
我想改变!到 NOT( 这相对容易,我遇到的问题是字母数字字符串后面的右括号
即
!AlphaNumericString 变为 NOT(AlphaNumericString)
更改前的单元格示例,
与(!BI,OR(Z1,Z2,Z102,Z103,Z104,Z306))
!L1M23 或(NP001 和 !CA);
Z200 和 !VP100;
!N001L010D132
我希望这些细胞成为,
与(非(BI),或(Z1,Z2,Z102,Z103,Z104,Z306))
非(L1M23) 或(NP001 和 非(CA));
Z200 和 非 (VP100);
不是(N001L010D132)
感叹号后面始终跟有 1 个字符,那么它将是一系列字母数字字符,并且感叹号字符串始终以以下之一结尾
空间
)
;
,
或者它可以以单元格中的最后一个字符结束,
按照上面的例子
希望这是有道理的。
我更喜欢宏,这样它就可以从 EXCEL 365 向后兼容到 2010 年,但如果有简单的公式,那就太棒了。
谢谢 姆巴特67
但是如果有简单的公式,那就太棒了
并非如此,但在 Office 365 中我们可以组合公式来获得您想要的结果:
=MAP(A1:A2,
LAMBDA(a,
REDUCE(a,SEQUENCE(LEN(a)-LEN(SUBSTITUTE(a,"!",))),
LAMBDA(r,_,
LET(x,MID(r,FIND("!",r),LEN(r)),
y,TOROW(HSTACK(FIND({" ","(",";",","},x),LEN(x)+1),2),
IFERROR(
SUBSTITUTE(
REPLACE(r,
MIN(y+FIND("!",r)-1),
,
")"),
"!",
"NOT(",
1),
r))))))
基本上它会检查在初始文本字符串中找到
!
的次数,以设置reduce的迭代次数,我将其声明为_
,因为它用于迭代,但在函数中不再调用。
初始文本字符串本身被声明为 r
.
迭代 我们在字符串
!
中搜索第一个找到的 r
,并找到最接近的
、)
、;
、,
字符或第一个找到的 !
之后的字符串末尾(以哪个为准)首先),在其后面添加一个 )
并将第一个计数 !
替换为 NOT(
。
如果出现上述错误,则保留r
,如果不是则替换/替代的r
成为新的r
并重复迭代_
次。
我使用
MAP
一次在各个单元格上循环公式,但如果需要,您可以用 MAP/LAMBDA
替换 LET(a,A1,REDUCE(..
部分,使其适用于单个单元格。