正则表达式匹配 if、and、和日期组合公式
Regexmatch if, and, and date combined formula
我在尝试修复我在 post 中找到的旧公式时遇到问题:
我遇到的问题是,现在他们将“最后一次晋升”或“f”列更改为“从不”而不是空白,这样编码就无法用于正在晋升的 Rct至 Cdt.
当前公式:
=ARRAYFORMULA(IF((((REGEXMATCH(LOWER(B2:B31), "rct"))*(TODAY()>C2:C31+20))+
((REGEXMATCH(LOWER(B2:B31), "cdt"))*(TODAY()>F2:F31+44))+
((REGEXMATCH(LOWER(B2:B31), "pvt"))*(TODAY()>F2:F31+74)))*
(REGEXMATCH(LOWER(D2:D31), "2 weeks ago|1 week ago|day|hour|minute"))*
(REGEXMATCH(LOWER(E2:E31), "2 weeks ago|1 week ago|day|hour|minute")),
"Y", "N"))
我得到的错误:
Function ADD parameter 1 expects number values. But 'Never' is a text
and cannot be coerced to a number.
我不明白为什么我会收到这个错误,因为在我看来,公式没有在 Rct 的“F”列中查找,只是 Cdt 和 Pvt。如果您从“F”列中删除“从不”,编码工作正常
这是一个测试 google sheet 文档:
https://docs.google.com/spreadsheets/d/14d-XT0xlAOj4gbHLtYYio2dJGBieFHuwvVLx8lkALl0/edit?usp=sharing
如果能帮助我修复此编码,我将不胜感激。
使用:
=ARRAYFORMULA(IF((((REGEXMATCH(LOWER(B2:B31), "rct"))*(TODAY()>C2:C31+20))+
((REGEXMATCH(LOWER(B2:B31), "cdt"))*(TODAY()>IFERROR(1*F2:F31)+44))+
((REGEXMATCH(LOWER(B2:B31), "pvt"))*(TODAY()>IFERROR(1*F2:F31)+74)))*
(REGEXMATCH(LOWER(D2:D31), "2 weeks ago|1 week ago|day|hour|minute"))*
(REGEXMATCH(LOWER(E2:E31), "2 weeks ago|1 week ago|day|hour|minute")),
"Y", "N"))
我不确定如何调整所有这些 regexmatch(),但这是解决问题的办法。与以往一样,您可以通过查找 here:
来了解所有函数
=ARRAYFORMULA(IF(C2:C="",IF(MMULT((TODAY()>{C2:C+20,N(F2:F)+{44,74}})(B2:B={"rct","cdt","pvt"}),{1;1;1})(MMULT(N(REGEXMATCH(D2:E "2 周|1 周|天|小时|分钟")),{1;1})=2),"Y","N")))
另外,我很确定你需要修复另一个问题的是 N() 你的日期范围,它将把任何文本变成数字 0,从而自动创建一个 true 来判断今天是否是“之后"它与否。
我在尝试修复我在 post 中找到的旧公式时遇到问题:
我遇到的问题是,现在他们将“最后一次晋升”或“f”列更改为“从不”而不是空白,这样编码就无法用于正在晋升的 Rct至 Cdt.
当前公式:
=ARRAYFORMULA(IF((((REGEXMATCH(LOWER(B2:B31), "rct"))*(TODAY()>C2:C31+20))+
((REGEXMATCH(LOWER(B2:B31), "cdt"))*(TODAY()>F2:F31+44))+
((REGEXMATCH(LOWER(B2:B31), "pvt"))*(TODAY()>F2:F31+74)))*
(REGEXMATCH(LOWER(D2:D31), "2 weeks ago|1 week ago|day|hour|minute"))*
(REGEXMATCH(LOWER(E2:E31), "2 weeks ago|1 week ago|day|hour|minute")),
"Y", "N"))
我得到的错误:
Function ADD parameter 1 expects number values. But 'Never' is a text and cannot be coerced to a number.
我不明白为什么我会收到这个错误,因为在我看来,公式没有在 Rct 的“F”列中查找,只是 Cdt 和 Pvt。如果您从“F”列中删除“从不”,编码工作正常
这是一个测试 google sheet 文档: https://docs.google.com/spreadsheets/d/14d-XT0xlAOj4gbHLtYYio2dJGBieFHuwvVLx8lkALl0/edit?usp=sharing
如果能帮助我修复此编码,我将不胜感激。
使用:
=ARRAYFORMULA(IF((((REGEXMATCH(LOWER(B2:B31), "rct"))*(TODAY()>C2:C31+20))+
((REGEXMATCH(LOWER(B2:B31), "cdt"))*(TODAY()>IFERROR(1*F2:F31)+44))+
((REGEXMATCH(LOWER(B2:B31), "pvt"))*(TODAY()>IFERROR(1*F2:F31)+74)))*
(REGEXMATCH(LOWER(D2:D31), "2 weeks ago|1 week ago|day|hour|minute"))*
(REGEXMATCH(LOWER(E2:E31), "2 weeks ago|1 week ago|day|hour|minute")),
"Y", "N"))
我不确定如何调整所有这些 regexmatch(),但这是解决问题的办法。与以往一样,您可以通过查找 here:
来了解所有函数=ARRAYFORMULA(IF(C2:C="",IF(MMULT((TODAY()>{C2:C+20,N(F2:F)+{44,74}})(B2:B={"rct","cdt","pvt"}),{1;1;1})(MMULT(N(REGEXMATCH(D2:E "2 周|1 周|天|小时|分钟")),{1;1})=2),"Y","N")))
另外,我很确定你需要修复另一个问题的是 N() 你的日期范围,它将把任何文本变成数字 0,从而自动创建一个 true 来判断今天是否是“之后"它与否。