在Excel中提取大写单词

z0qdvdin  于 2023-04-07  发布在  其他
关注(0)|答案(2)|浏览(223)

我有167个单元格,每个单元格都是一串文本,每个单元格都有一个全大写的单词,我只需要将这个单词复制到一个新的单元格。我已经尝试了EXACT公式,但它只能识别文本是否有大写单词,并返回“true”或“false”。
结果应为:
| A1|B1|
| --------------|--------------|
| 那只敏捷的棕色狐狸跳过那只懒狗|跳跃|

ubof19bj

ubof19bj1#

尝试以下用户定义函数:

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)非常容易安装和用途:

  1. ALT-F11打开VBE窗口
  2. ALT-I ALT-M打开新模块
    1.粘贴内容并关闭VBE窗口
    如果保存工作簿,则UDF将与工作簿一起保存。如果使用的Excel版本高于2003,则必须将文件另存为.xlsm而不是.xlsx

删除自定义项:

1.如上所述调出VBE窗口
1.清除代码
1.关闭VBE窗口
从Excel中使用自定义项:
=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

必须启用宏才能使用此功能!

  • (此代码可以很容易地修改为从句子中提取所有大写单词)*
nbnkbykc

nbnkbykc2#

您可以使用正则表达式来提取大写单词。

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
\bAssert字边界位置(^\w|\w$|\W\w|\w\W)
匹配下面列表中的单个字符[A-Z]+
+ Quantifier -匹配一次和无限次,尽可能多次,根据需要返回(贪婪)
A-Z在A(索引65)和Z(索引90)之间的单个字符(区分大小写)
\bAssert字边界位置(^\w|\w$|\W\w|\w\W)

表中:

相关问题