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
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
2条答案
按热度按时间ubof19bj1#
尝试以下用户定义函数:
它将提取单元格中的第一个大写单词。
用户定义函数(UDF)非常容易安装和用途:
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
必须启用宏才能使用此功能!
nbnkbykc2#
您可以使用正则表达式来提取大写单词。
正则表达式:
试试here。
\b
Assert字边界位置(^\w|\w$|\W\w|\w\W)
匹配下面列表中的单个字符
[A-Z]+
+
Quantifier -匹配一次和无限次,尽可能多次,根据需要返回(贪婪)A-Z
在A(索引65)和Z(索引90)之间的单个字符(区分大小写)\b
Assert字边界位置(^\w|\w$|\W\w|\w\W)
表中: