我有167个单元格,每个单元格都是文本字符串,其中每个单元格都有一个全为大写的单词,我只需要将该单词复制到一个新的单元格中。 我已经试过EXACT公式,但是它只能识别文本是否具有大写单词,并返回“ true”或“ false”。
示例:
A1:懒惰的狗身上的快速褐狐JUMPS
,结果应为:
B1:跳跃
答案 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
它将在单元格中提取第一个大写单词。
用户定义的功能(UDF)非常容易安装和使用:
如果保存工作簿,则UDF将随之保存。 如果您在2003年以后使用Excel版本,则必须保存 该文件为.xlsm而不是.xlsx
要删除 UDF:
要使用来自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)
中声明位置
工作表中: