如何在VBA excel上每n个字符分割一个字符串?

时间:2019-03-27 10:11:21

标签: excel vba

我有一个类似于

的字符串
 "1111 2222222 3333 77777 44444 55555 6666 99999"

是否可以在第10个字符之后分割字符串,即

1111 22222
22 3333 77
777 44444 
55555 6666
99999

2 个答案:

答案 0 :(得分:2)

使用类似于{Kemal Al GAZZAH答案的Mid函数,但使用Step选项进行循环,而不用计算所需的输出数量,即可轻松实现这一目标

Sub test()
    Dim TestStr
    Dim i As Long, n As Long
    Dim SplitStr As String

    TestStr = "1111 2222222 3333 77777 44444 55555 6666 99999"

    n = 10

    For i = 1 To Len(TestStr) Step n
        SplitStr = SplitStr & Mid(TestStr, i, n) & vbNewLine
    Next i

    MsgBox SplitStr
End Sub

您也可以将其写为Function,这将使其变得更加有用

Option Explicit
Public Function SplitString(StringToSplit As String, n As Long) As String()
    Dim i As Long, arrCounter As Long
    Dim tmp() As String

    ReDim tmp(0 To CLng(Len(StringToSplit) / n))

    For i = 1 To Len(StringToSplit) Step n
        tmp(arrCounter) = Mid(StringToSplit, i, n)
        arrCounter = arrCounter + 1
    Next i

    SplitString = tmp
End Function
Public Sub test()
    Dim TestStr As String

    TestStr = "1111 2222222 3333 77777 44444 55555 6666 99999"

    MsgBox Join(SplitString(TestStr, 10), vbNewLine)
End Sub

答案 1 :(得分:1)

您可以使用此代码 它使用一个使用the function MID的循环,该循环从字符串中检索n个克拉特 (3个参数字符串,开始和长度)

以下代码具有一个函数,其中strig作为参数拆分 我把这个字符串放在cell(1,2)中,并将结果放在第1列中,从第1行开始。您当然可以更改它

Sub splitstring(mystring)
n = Int(1 + Len(s) / 10)
mystring1= mystring

For i = 0 To n
  mystring1= Mid(mystring, 1 + i * 10, 10)
  Cells(i + 1, 1) = mystring1
Next
End Sub
Sub call_me()
'splitstring ("1111 2222222 3333 77777 44444 55555 6666 99999")
splitstring (Cells(1, 2))
End Sub

enter image description here