在Excel上提取大写单词

时间:2018-09-05 12:52:11

标签: excel formula uppercase

我有167个单元格,每个单元格都是文本字符串,其中每个单元格都有一个全为大写的单词,我只需要将该单词复制到一个新的单元格中。 我已经试过EXACT公式,但是它只能识别文本是否具有大写单词,并返回“ true”或“ false”。

示例:

A1:懒惰的狗身上的快速褐狐JUMPS

,结果应为:

B1:跳跃

2 个答案:

答案 0 :(得分:2)

尝试以下用户定义功能:

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

它将在单元格中提取第一个大写单词。

enter image description here

用户定义的功能(UDF)非常容易安装和使用:

  1. ALT-F11弹出VBE窗口
  2. ALT-I ALT-M打开一个新模块
  3. 将内容粘贴并关闭VBE窗口

如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用Excel版本,则必须保存 该文件为.xlsm而不是.xlsx

删除 UDF:

  1. 如上调出VBE窗口
  2. 清除代码
  3. 关闭VBE窗口

使用来自Excel的UDF,

= myfunction(A1)

要全面了解有关宏的更多信息,请参见:

http://www.mvps.org/dmcritchie/excel/getstarted.htm

http://msdn.microsoft.com/en-us/library/ee814735(v=office.14).aspx

,有关UDF的详细信息,请参见:

http://www.cpearson.com/excel/WritingFunctionsInVBA.aspx

必须启用宏才能使其正常工作!

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

答案 1 :(得分:0)

您可以使用正则表达式提取大写单词。可以将它部署为表单中的UDF

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

正则表达式:

here试试。

\b在单词边界(^\w|\w$|\W\w|\w\W)中声明位置

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

+量词-在一次和无限次之间进行匹配,并尽可能多地匹配,并根据需要返回(贪婪)

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

\b在单词边界(^\w|\w$|\W\w|\w\W)中声明位置


工作表中

enter image description here