在Excel上提取大写单词
我有167个单元格,每个单元格都有一个文本字符串,每个单元格都有一个大写的单词,我只需要将这个单词复制到一个新的单元格中。 我尝试过精确的公式,但它只识别文本是否有大写单词,并返回true或false 例如: 敏捷的棕色狐狸跳过了懒惰的狗 结果应该是:在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
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我无法跟踪你的链接。这就是我需要的!然而,当大写字母单独出现在句子上时,它会过滤所说的字母。因此:是的。它是所有的大写字母和一个单词,这是正则表达式正在寻找的。我还告诉它只返回第一场比赛。我可以让它循环所有匹配项,只返回大于一个字母的单词或排除某些单词………唯一的区别方法是,如果有某些单词必须忽略或单词必须有一定长度。在这种情况下,您的规则是什么?只选择单词,排除单个字母这就是我需要的!然而,当大写字母单独出现在句子上时,它会过滤所说的字母。因此:是的。它是所有的大写字母和一个单词,这是正则表达式正在寻找的。我还告诉它只返回第一场比赛。我可以让它循环所有匹配项,只返回大于一个字母的单词或排除某些单词……唯一的区别方法是,如果有某些单词必须忽略或单词必须有一定长度。在这种情况下,您的规则是什么?仅选择单词,排除单个字母