Excel/VBA-如何每隔N个字符在字符串中插入一个字符

Excel/VBA-如何每隔N个字符在字符串中插入一个字符,vba,excel,excel-formula,Vba,Excel,Excel Formula,我有一份报告,当导出时,它在单个单元格中以单个字符串的形式显示订单号(订单号的长度始终为7位)。例如:订单1234567和9876543将在单个单元格中显示为1234567987643。每个单元格没有最大订单数,每个单元格的订单数都不同 是否有任何方法可以每隔7位添加一个字符,以便以后可以在列中添加文本?您可以使用串联 例如,如果值位于两个单元格中:=串联(A1,“,”B1) Ex if值在一个单元格中=if(LEN(A1)>7,串联(左(A1,7),“,”,中(A1,8100)) 编辑添加 可

我有一份报告,当导出时,它在单个单元格中以单个字符串的形式显示订单号(订单号的长度始终为7位)。例如:订单1234567和9876543将在单个单元格中显示为1234567987643。每个单元格没有最大订单数,每个单元格的订单数都不同


是否有任何方法可以每隔7位添加一个字符,以便以后可以在列中添加文本?

您可以使用
串联

例如,如果值位于两个单元格中:
=串联(A1,“,”B1)

Ex if值在一个单元格中
=if(LEN(A1)>7,串联(左(A1,7),“,”,中(A1,8100))

编辑添加

可以使用的VBA代码(不久前找到)

Sub AddACharacter()
变暗Rng As范围
变暗输入范围,输出范围
将行设置为整数
Dim Char作为字符串
将索引设置为整数
作为变体的Dim-arr
作为字符串的Dim Val
作为字符串的Dim OutVal
Dim Num作为整数
xTitleId=“添加字符”
设置输入=应用程序。选择
设置inputng=Application.InputBox(“范围:”,xTitleId,inputng.Address,类型:=8)
行=应用程序.InputBox(“字符数:”,xTitleId,类型:=1)
Char=Application.InputBox(“指定字符:”,xTitleId,类型:=2)
Set-OutRng=Application.InputBox(“输出到(单个单元格):”,xTitleId,类型:=8)
放线量=放线量范围(“A1”)
Num=1
对于输入中的每个Rng
Val=额定值
OutVal=“”
对于索引=1到VBA.Len(Val)
如果索引Mod Row=0,索引VBA.Len(Val),则
OutVal=OutVal+VBA.Mid(Val,Index,1)+Char
其他的
OutVal=OutVal+VBA.Mid(Val,索引,1)
如果结束
下一个
OutRng.Cells(Num,1).Value=OutVal
Num=Num+1
下一个
端接头

假设字符串位于A2中,然后尝试以下操作。。。 在B2中


上面的公式将在七个字符后插入一个“|”。

为了避免使用冗长复杂的公式,我建议使用VBA

将下面的代码粘贴到标准模块中,然后您可以在工作表上使用如下公式:

=InsertPipe(A1,7)

函数插入管道(s为字符串,间隔为长度)
如果间隔小于1,则退出功能
暗i为长,结果为字符串
对于i=1至Len(s)步距
出错时继续下一步
结果=结果和左(s,间隔)和“|”
s=中间(s,间隔+1,长(s)-间隔)
接下来我
插入管道=左(结果,透镜(结果)-1)
端函数

您可以使用从上到下复制的公式,但与预期的拆分相关的公式是有限的,您可以使用这些线,在我的示例中是b1到z1

=MID($A1,如果(COLUMN()-2=0,1,((COLUMN()-2)*7)+1),则为7)


替代
比我最初的想法更好这些都能回答问题。OP表示一个单元格中可以有任意数量的订单号,因此如果有6个订单号,您可能需要插入5个管道
,这很有意义。该要求未得到充分理解。:)这只会在前7位之后添加一个逗号,只要有7的倍数,我就需要每隔7位添加一个逗号。
=SUBSTITUTE(A2,LEFT(A2,7),LEFT(A2,7)&"|")
=InsertPipe(A1,7)
Function InsertPipe(s As String, interval As Long)
    If interval < 1 Then Exit Function        

    Dim i As Long, result As String

    For i = 1 To Len(s) Step interval
        On Error Resume Next
        result = result & Left(s, interval) & "|"
        s = Mid(s, interval + 1, Len(s) - interval)
    Next i

    InsertPipe = Left(result, Len(result) - 1)
End Function