首页 > 解决方案 > 宏从单元格vba中获取大写字母

问题描述

对所有人来说都是美好的一天。我可以将此功能转换为宏吗?一键轻松控制多个文件

Public Function CreateShortcut(ByVal StrVal As String) As String

    Dim i As Long, tVal As String
    With CreateObject("VBScript.RegExp")
        .Pattern = "[A-Z&/.]"
        .Global = True
        With .Execute(StrVal)
            For i = 0 To .Count - 1
                tVal = tVal & .Item(i)
            Next i
        End With
    End With
    
    CreateShortcut = tVal

End Function

问候

标签: excelvba

解决方案


提供您如何“尝试创建宏”的尝试对您是有益的,这样我们可以更好地将我们的想法与您的想法保持一致,但是,这可以使用正则表达式或各种其他方法来完成。

下面的方法确实使用正则表达式来执行这些匹配。

Option Explicit

Public Function CreateShortcut(ByVal StrVal As String) As String

    Dim i As Long, tVal As String
    With CreateObject("VBScript.RegExp")
        .Pattern = "[A-Z&]"
        .Global = True
        With .Execute(StrVal)
            For i = 0 To .Count - 1
                tVal = tVal & .Item(i)
            Next i
        End With
    End With
    
    CreateShortcut = tVal

End Function

您可以像使用任何其他工作表函数一样使用上述函数:

=CreateShortcut(B2)

如果您愿意,欢迎您更改函数的名称,或者继续使用我在示例中使用的那个CreateShortcut()

在此处输入图像描述

我完全清楚 B4 单元格中“工程与部门”中的错字。这就是 OP 在问题中呈现他们的数据的方式,为了保持一致性,我选择保留它

重要的是要了解此代码不提供基本数据验证,例如防止重复匹配确保字符串中甚至包含大写字母。这是您在项目中需要考虑的事情

RegEx 模式非常基本。

  • 括号[...]是字符类括号。它的工作是一次匹配任何类别的字符。在这种情况下,您要么尝试匹配任何大写字符,要么匹配A-Z& 符号&
  • 我们将.Global属性设置True为匹配字符串中每次出现For i = 的模式,因此我们可以使用我们的方法遍历它们。

推荐阅读