首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >excel公式中的多重充要条件

excel公式中的多重充要条件
EN

Stack Overflow用户
提问于 2016-11-18 12:26:16
回答 2查看 49关注 0票数 0

我需要检查一下D8手机的价值:

以数字或字母开头,以-f或-m结尾

如果序列中的第7位数小于5,但只有当它实际上以一个数字开头时,如果它以字母开头,则必须检查结尾的-f或-m部分.

以下是我所拥有的:

代码语言:javascript
运行
复制
=IF(ISNUMBER(VALUE(LEFT(D8,1), IF(--MID(D8,7,1)<5,"F","M"),IF(IFERROR(FIND("-F",D8),FALSE),"F","M"))

编辑:如果以数字开头,则检查数字7是否< 5,如果以字母开头,则查看值是否以-f或-m结尾。

如果数字7<5结果=F else M如果以-f结果结尾=F else M

ID和护照都是在D8中获取的,ID仅为数字,护照以字母开头。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-18 12:36:12

你的公式不管用,因为你忘了一些()。试试这个

代码语言:javascript
运行
复制
=IF(ISNUMBER(VALUE(LEFT(D8,1))), IF(--MID(D8,7,1)<5,"F","M"),IF(IFERROR(FIND("-F",D8),FALSE),"F","M"))
票数 1
EN

Stack Overflow用户

发布于 2016-11-18 13:16:20

如果您对UDF开放(使用VBA),那么正则表达式对于这种类型的任务是很好的,因为它们非常具有可伸缩性。您当然可以在Excel中完成这一任务,但是您的函数已经很难读懂了,而且也没有那么复杂。如果您开始添加或更改条件,那么括号的简单错位可能会破坏一切。

UDF易于读、写、调试和维护。下面是一个使用正则表达式引擎的示例:

代码语言:javascript
运行
复制
Function Checker(R As Range) As Boolean

  Dim result As Boolean
  Dim rxStartsLet As New RegExp
  Dim rxStartsNum As New RegExp
  Dim rxLessThan5 As New RegExp

  rxStartsLet.Pattern = "^[A-Za-z]"
  rxStartsNum.Pattern = "^[0-9]"
  rxLessThan5.Pattern = "[0-4]"

  If rxStartsNum.Test(R.Value2) Then
    result = rxLessThan5.Test(Mid(R.Value2, 7, 1))
  ElseIf rxStartsLet.Test(R.Value2) Then
    result = Right(R.Value2, 2) = "-F" Or Right(R.Value2, 2) = "-M"
  Else
    result = False
  End If

  Checker = result

End Function

然后你的公式可以读到:

代码语言:javascript
运行
复制
=If(Checker(D8), "M", "F")

请注意,正则表达式可以确定“小于5”,而不需要转换成数字--在本例中,我们刚刚提到了0到4的包含范围。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40677113

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档