Excel VBA:“将子例程更改为函数”,用于字符串转换

发布于 2025-01-09 23:52:36 字数 1276 浏览 3 评论 0原文

通过我的工作以及复制其他人的工作,我拼凑了一个 Excel VBA Sub,它将包含(文本组)和(数字组)组的长串分隔成一个替换字符串,每个单独的组之间有空格;按照这个例子: • “123abc12aedsw2345der” • …应用选择 Sub() 然后变为: • “123 abc 12 aedsw 2345 der” 它根据“选择”转换原始单元格中的字符串,因此我当前保留原始单元格中更改后的数据 问题:我想将其更改为函数,其中转换后的数据将出现在函数单元格中,并保持原始单元格不变。我已经完成了数百个这样的功能,但我似乎无法让它作为一个独立的功能工作。在完成并工作的子例程下面,我尝试转换为独立函数以从工作表上的任何位置调用:

Sub SplitTextNumbersSelection()
Dim c As Range

'********** Inserts Space Before Number Groups ******************************
For n = 1 To 10
    For Each c In Selection
        c = InsertSpace(c.Text)
    Next
Next n
'****************Inserts Space Before Letter Groups ***********************
For n = 1 To 10
    For Each c In Selection
        c = InsertSpace2(c.Text)
    Next
Next n
'****************************************

End Sub

Function InsertSpace(str As String) As String
    With CreateObject("vbscript.regexp")
        .Pattern = "([a-z])(\d)"
        '.Pattern = "(\d)([a-z])"
        InsertSpace = .Replace(str, "$1 $2")
    End With
End Function

Function InsertSpace2(str As String) As String
    With CreateObject("vbscript.regexp")
        '.Pattern = "([a-z])(\d)"
        .Pattern = "(\d)([a-z])"
        InsertSpace2 = .Replace(str, "$1 $2")
    End With
End Function

Through my work, and copying others, I have cobbled together a Excel VBA Sub that separates a long sting with groups of (text groups) and (number groups) into a replacement string with spaces in between each seperate group; as per this example:
“123abc12aedsw2345der”
• …Apply selection Sub() then becomes:
“123 abc 12 aedsw 2345 der”
It converts the string in its original cell as per the “selection”, so I am currently left with the altered data in is original cell
PROBLEM: I would like to change this into a FUNCTION where the transformed data would appear in the Function cell and leave the original cell intact. I have done hundreds of these but I cannot seem to get this to work as an independent FUNCTION. Below the finished and working Sub Routine I am trying to convert to an independent function to call from anywhere on the worksheet:

Sub SplitTextNumbersSelection()
Dim c As Range

'********** Inserts Space Before Number Groups ******************************
For n = 1 To 10
    For Each c In Selection
        c = InsertSpace(c.Text)
    Next
Next n
'****************Inserts Space Before Letter Groups ***********************
For n = 1 To 10
    For Each c In Selection
        c = InsertSpace2(c.Text)
    Next
Next n
'****************************************

End Sub

Function InsertSpace(str As String) As String
    With CreateObject("vbscript.regexp")
        .Pattern = "([a-z])(\d)"
        '.Pattern = "(\d)([a-z])"
        InsertSpace = .Replace(str, "$1 $2")
    End With
End Function

Function InsertSpace2(str As String) As String
    With CreateObject("vbscript.regexp")
        '.Pattern = "([a-z])(\d)"
        .Pattern = "(\d)([a-z])"
        InsertSpace2 = .Replace(str, "$1 $2")
    End With
End Function

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空城旧梦 2025-01-16 23:52:36

简单一点:

Function PrepString(v As String)
    Dim rv As String, i As Long, c1, c2
    For i = 1 To Len(v) - 1
        c1 = Mid(v, i, 1)
        c2 = Mid(v, i + 1, 1)
        If (c1 Like "[a-z]" And c2 Like "[0-9]") Or _
           (c2 Like "[a-z]" And c1 Like "[0-9]") Then
            rv = rv & c1 & " "
        Else
            rv = rv & c1
        End If
    Next i
    PrepString = rv & Right(v, 1)
End Function

Bit simpler:

Function PrepString(v As String)
    Dim rv As String, i As Long, c1, c2
    For i = 1 To Len(v) - 1
        c1 = Mid(v, i, 1)
        c2 = Mid(v, i + 1, 1)
        If (c1 Like "[a-z]" And c2 Like "[0-9]") Or _
           (c2 Like "[a-z]" And c1 Like "[0-9]") Then
            rv = rv & c1 & " "
        Else
            rv = rv & c1
        End If
    Next i
    PrepString = rv & Right(v, 1)
End Function
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文