在Excel上提取大写单词

在Excel上提取大写单词,excel,formula,uppercase,Excel,Formula,Uppercase,我有167个单元格,每个单元格都有一个文本字符串,每个单元格都有一个大写的单词,我只需要将这个单词复制到一个新的单元格中。 我尝试过精确的公式,但它只识别文本是否有大写单词,并返回true或false 例如: 敏捷的棕色狐狸跳过了懒惰的狗 结果应该是: B1:跳转尝试以下用户定义的功能: Public Function grabber(s As String) As String grabber = "" arry = Split(s, " ") For Each a I

我有167个单元格,每个单元格都有一个文本字符串,每个单元格都有一个大写的单词,我只需要将这个单词复制到一个新的单元格中。 我尝试过精确的公式,但它只识别文本是否有大写单词,并返回true或false

例如:

敏捷的棕色狐狸跳过了懒惰的狗

结果应该是:


B1:跳转

尝试以下用户定义的功能:

Public Function grabber(s As String) As String
    grabber = ""
    arry = Split(s, " ")
    For Each a In arry
        If a = UCase(a) Then
            grabber = a
            Exit Function
        End If
    Next a
End Function
它将提取单元格中的第一个大写单词

用户定义的函数UDF非常易于安装和使用:

ALT-F11将显示VBE窗口 ALT-I ALT-M打开一个新模块 粘贴内容并关闭VBE窗口 如果保存工作簿,则自定义项将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

要删除UDF,请执行以下操作:

如上所述打开VBE窗口 清除代码 关闭VBE窗口 要使用Excel中的自定义项,请执行以下操作:

=My1

要了解有关宏的更多信息,请参阅:

有关自定义项的详细信息,请参见:

必须启用宏才能使其工作


可以轻松修改此代码以从句子中提取所有大写单词

尝试以下用户定义的功能:

Public Function grabber(s As String) As String
    grabber = ""
    arry = Split(s, " ")
    For Each a In arry
        If a = UCase(a) Then
            grabber = a
            Exit Function
        End If
    Next a
End Function
它将提取单元格中的第一个大写单词

用户定义的函数UDF非常易于安装和使用:

ALT-F11将显示VBE窗口 ALT-I ALT-M打开一个新模块 粘贴内容并关闭VBE窗口 如果保存工作簿,则自定义项将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

要删除UDF,请执行以下操作:

如上所述打开VBE窗口 清除代码 关闭VBE窗口 要使用Excel中的自定义项,请执行以下操作:

=My1

要了解有关宏的更多信息,请参阅:

有关自定义项的详细信息,请参见:

必须启用宏才能使其工作


这段代码可以很容易地修改以从一个句子中提取所有大写单词

您可以使用正则表达式提取大写单词。这可以作为工作表中的自定义项进行部署

Option Explicit
Public Sub TEST()
    Dim tests(), i As Long
    tests = Array("The lazy LAD was sorry for the debacle", "She wept as her FLAXEN hair tumbled down the parapet")

    For i = LBound(tests) To UBound(tests)
        Debug.Print GetString(tests(i))
    Next
End Sub

Public Function GetString(ByVal inputString As String) As String
    With CreateObject("VBScript.RegExp")
        .Global = True
        .MultiLine = True
        .Pattern = "\b[A-Z]+\b"
        If .TEST(inputString) Then
            If len(.Execute(inputString)(0)) > 1 Then
                GetString = .Execute(inputString)(0)
                Exit Function
            End If     
        End If
        GetString = vbNullString
    End With
End Function
正则表达式:

试试看

\b断言单词边界处的位置^\w |\w$|\w\w |\w\w

匹配下面列表中的单个字符[a-Z]+

+量词-在一次和无限次之间匹配,尽可能多地匹配,根据需要返回

A-Z索引65和Z索引90之间的单个字符,区分大小写

\b断言单词边界处的位置^\w |\w$|\w\w |\w\w

第页:


可以使用正则表达式提取大写单词。这可以作为工作表中的自定义项进行部署

Option Explicit
Public Sub TEST()
    Dim tests(), i As Long
    tests = Array("The lazy LAD was sorry for the debacle", "She wept as her FLAXEN hair tumbled down the parapet")

    For i = LBound(tests) To UBound(tests)
        Debug.Print GetString(tests(i))
    Next
End Sub

Public Function GetString(ByVal inputString As String) As String
    With CreateObject("VBScript.RegExp")
        .Global = True
        .MultiLine = True
        .Pattern = "\b[A-Z]+\b"
        If .TEST(inputString) Then
            If len(.Execute(inputString)(0)) > 1 Then
                GetString = .Execute(inputString)(0)
                Exit Function
            End If     
        End If
        GetString = vbNullString
    End With
End Function
正则表达式:

试试看

\b断言单词边界处的位置^\w |\w$|\w\w |\w\w

匹配下面列表中的单个字符[a-Z]+

+量词-在一次和无限次之间匹配,尽可能多地匹配,根据需要返回

A-Z索引65和Z索引90之间的单个字符,区分大小写

\b断言单词边界处的位置^\w |\w$|\w\w |\w\w

第页:



请提供一个示例和预期结果。@Jbowman,我已经用示例编辑了该文件。谢谢,请提供一个示例和预期结果。@Jbowman,我已经用示例编辑了该文件。谢谢虽然这样做有效,但有时会发生这种情况:因为第一个字母是大写的。@Caracks如果代码给出错误的结果,请发布一个失败的示例,我们可以修复它。@Caracks我无法跟踪您的链接。虽然这样做有效,但有时会发生这种情况:因为第一个字母是大写的。@Caracks如果代码给出错误的结果,发布一个失败的示例,我们可以修复它。@Caracks我无法跟踪你的链接。这就是我需要的!然而,当大写字母单独出现在句子上时,它会过滤所说的字母。因此:是的。它是所有的大写字母和一个单词,这是正则表达式正在寻找的。我还告诉它只返回第一场比赛。我可以让它循环所有匹配项,只返回大于一个字母的单词或排除某些单词………唯一的区别方法是,如果有某些单词必须忽略或单词必须有一定长度。在这种情况下,您的规则是什么?只选择单词,排除单个字母这就是我需要的!然而,当大写字母单独出现在句子上时,它会过滤所说的字母。因此:是的。它是所有的大写字母和一个单词,这是正则表达式正在寻找的。我还告诉它只返回第一场比赛。我可以让它循环所有匹配项,只返回大于一个字母的单词或排除某些单词……唯一的区别方法是,如果有某些单词必须忽略或单词必须有一定长度。在这种情况下,您的规则是什么?仅选择单词,排除单个字母