Excel 如何查找包含数字括号的单元格-例如:(1)

Excel 如何查找包含数字括号的单元格-例如:(1),excel,vba,user-defined-functions,Excel,Vba,User Defined Functions,我使用的公式是: =IF(SUM(COUNTIF(K6,"*"&{"current","(1)"}&"*")),"within 5 minutes", IF(SUM(COUNTIF(K6,"*"&{"current","(2)"}&"*")),"within 10 minutes", IF(SUM(COUNTIF(K6,"*"&{"current","(3)"}&"*")),"within 15 minutes", IF(SUM(COUNTIF(K

我使用的公式是:

=IF(SUM(COUNTIF(K6,"*"&{"current","(1)"}&"*")),"within 5 minutes",
IF(SUM(COUNTIF(K6,"*"&{"current","(2)"}&"*")),"within 10 minutes",
IF(SUM(COUNTIF(K6,"*"&{"current","(3)"}&"*")),"within 15 minutes",
IF(SUM(COUNTIF(K6,"*"&{"current","(4)"}&"*")),"within 20 minutes",
IF(SUM(COUNTIF(K6,"*"&{"current","(5)"}&"*")),"within 25 minutes",
IF(SUM(COUNTIF(K6,"*"&{"current","(6)"}&"*")),"within 30 minutes"))))))
输出是拖拽同时包含
当前
1
/
2
/
3
等的任何单元格

我需要它只提取包含
当前
(1)
/
(2)
/
(3)
等的单元格


希望有一个简单的方法来确保公式包含括号


以下是预期结果的示例屏幕截图:

如果你真的不想听从@Andreas的建议(这是另一种表达“为什么我没有想到那件事”),那么试试:


警告:它忽略了右括号,因此
此单元格包含当前值,并且(1
不会返回“FALSE”

如果您真的不想遵循@Andreas建议(这是表示“为什么我没有想到这个问题”的另一种方式),请尝试:


警告:它忽略右括号,因此
此单元格包含当前值,并且(1
不会返回“FALSE”

如果VBA和UDF正常,则我建议您使用正则表达式

打开VBA编辑器(ALT+F11)并添加模块

粘贴以下代码并将Excel工作簿另存为宏激活工作簿(xlsm)

它将返回它正在查找的零件
当前和[编号]

返回的代码当然可以是您想要的任何内容。
但我不明白你问题中的逻辑,这就是为什么我返回它正在寻找的东西


我现在明白逻辑了

这将返回您期望的输出

Function Regex(Cell)
    Dim RE As Object

    Set RE = CreateObject("vbscript.regexp")

    RE.Pattern = ".*current and \((\d+)\)"
    ' or if you want to match optional ()
    'RE.Pattern = ".*current and \(?(\d+)\)?"
    RE.Global = True
    RE.IgnoreCase = True
    Set Matches = RE.Execute(Cell)

    If Matches.Count <> 0 Then
        Regex = "within " & Matches.Item(0).submatches.Item(0)*5 & " minutes"
    Else
        Regex = "False"
    End If

End Function

此代码将查找当前的
[任何内容]
[任何内容]
([number])
如果VBA和UDF正常,则我建议您使用正则表达式

打开VBA编辑器(ALT+F11)并添加模块

粘贴以下代码并将Excel工作簿另存为宏激活工作簿(xlsm)

它将返回它正在查找的零件
当前和[编号]

返回的代码当然可以是您想要的任何内容。
但我不明白你问题中的逻辑,这就是为什么我返回它正在寻找的东西


我现在明白逻辑了

这将返回您期望的输出

Function Regex(Cell)
    Dim RE As Object

    Set RE = CreateObject("vbscript.regexp")

    RE.Pattern = ".*current and \((\d+)\)"
    ' or if you want to match optional ()
    'RE.Pattern = ".*current and \(?(\d+)\)?"
    RE.Global = True
    RE.IgnoreCase = True
    Set Matches = RE.Execute(Cell)

    If Matches.Count <> 0 Then
        Regex = "within " & Matches.Item(0).submatches.Item(0)*5 & " minutes"
    Else
        Regex = "False"
    End If

End Function


此代码将查找
[任何内容]
当前的
[任何内容]
([number])
能否请您提供示例数据?我无法复制您的问题。您的意思是“当前和其中一个数字”还是“当前或其中任何一个数字”?您的逻辑不清楚。另外,
(2)
可以是
-2
的符号,因此根据您的单元格内容,它可以是数字,而不是文本。数据样本和/或屏幕截图会有所帮助。添加样本表屏幕截图使用正则表达式和UDF。您能给我们提供样本数据吗?我无法复制您的问题。您是指“当前和其中一个数字”还是“当前或任意一个数字”?您的逻辑不清楚。另外,
(2)
可以是
-2
的符号,因此根据您的单元格内容,它可以是数字,而不是文本。数据示例和/或屏幕截图会有所帮助。添加了一个示例表屏幕截图使用regex和UDF。天哪,这是一个很酷的公式。效果很好。它应该可以捕获我要查找的所有内容。谢谢你!更新一下-看起来像当current和(1)位于不同的字符串中时,它可以工作,但如果它们位于同一字符串中,则不能工作;例如:if(string.tolower.current.accountemail(1)”这返回false。现在尝试使用宏代码,这是一个很酷的公式。它工作得非常好。它应该捕获我要查找的所有内容。谢谢你!更新此内容-当current和(1)在不同字符串中时它看起来有效,但如果它们在同一字符串中则无效;例如:if(string.tolower.current.accountemail(1)“这返回false。尝试立即使用宏代码@controlnetic.nomad解决方案中的同一问题-至少我能想到的就是为什么它不起作用:“当前”和“(1)”在同一字符串中:“如果(string.tolower.current.accountemail(1)”@max我看不出它在该字符串上失败的原因。虽然自从我从手机上发布代码后,我甚至还没有尝试过该代码。我很快会在我的计算机上尝试。给我几分钟。@max我现在看到了,但没有启动计算机。你刚才说的
当前和([number])
。您的字符串没有
。这不是必需的吗?您的意思是
当前的
([编号])
?是!不是,是required@max然后尝试我添加的最后一个代码。如果它不起作用,我明天会修复它,我现在在床上。来自@controlnetic.nomad solution的相同问题-至少这是我所能想到的为什么它不起作用的原因:“当前”和“(1)”在同一个字符串中:“如果(string.tolower.current.accountemail(1)”@max我看不出它在该字符串上失败的原因。虽然自从我从手机上发布代码后,我甚至还没有尝试过该代码。我很快会在我的计算机上尝试。给我几分钟。@max我现在看到了,但没有启动计算机。你刚才说的
当前和([number])
。您的字符串没有
。这不是必需的吗?您的意思是
当前的
([number])
?是的!没有,是的required@max然后尝试我添加的最后一个代码。如果它不起作用,我将在明天修复它,我现在在床上。
=Regex(A1)
Function Regex(Cell)
    Dim RE As Object

    Set RE = CreateObject("vbscript.regexp")

    RE.Pattern = ".*current and \((\d+)\)"
    ' or if you want to match optional ()
    'RE.Pattern = ".*current and \(?(\d+)\)?"
    RE.Global = True
    RE.IgnoreCase = True
    Set Matches = RE.Execute(Cell)

    If Matches.Count <> 0 Then
        Regex = "within " & Matches.Item(0).submatches.Item(0)*5 & " minutes"
    Else
        Regex = "False"
    End If

End Function
Function Regex(Cell)
    Dim RE As Object

    Set RE = CreateObject("vbscript.regexp")

    RE.Pattern = ".*current.*?\((\d+)\)"
    RE.Global = True
    RE.IgnoreCase = True
    Set Matches = RE.Execute(Cell)

    If Matches.Count <> 0 Then
        Regex = "within " & Matches.Item(0).submatches.Item(0)*5 & " minutes"
    Else
        Regex = "False"
    End If

End Function