2017-04-06 299 views
2

我有一个报告说出口时,它在为一个单一字符串的单个单元格显示订单号(谁是永远的7位长)。例如:订单1234567和9876543将在单个单元格中显示为12345679876543。每个单元不存在最大数量的订单,它在每个单元上都不相同。的Excel/VBA - 如何在一个字符串插入字符每N个字符

有什么办法,我可以添加一个字符,每7位,这样我可以做一个文本列之后?

回答

4

要避免使用长且复杂的公式,我建议使用VBA。

下面的代码粘贴到一个标准的模块,然后就可以在工作表上使用的公式是这样的:

=InsertPipe(A1) 

Function InsertPipe(s As String) 
    Dim i As Long 
    Dim result As String 

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

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

这真棒,非常感谢,它效果很好! – Jonorl

1

你可以使用CONCATENATE

防爆如果值是在两个单元:=CONCATENATE(A1,",",B1)

防爆如果值是一个细胞=IF(LEN(A1)>7,CONCATENATE(LEFT(A1,7),",",MID(A1,8,100)))

编辑ADD

VBA的代码,你可以使用(发现前一段时间)

Sub AddACharacter() 

Dim Rng As Range 
Dim InputRng As Range, OutRng As Range 
Dim Row As Integer 
Dim Char As String 
Dim Index As Integer 
Dim arr As Variant 
Dim Val As String 
Dim OutVal As String 
Dim Num As Integer 
xTitleId = "Add a character" 
Set InputRng = Application.Selection 
Set InputRng = Application.InputBox("Range :", xTitleId, InputRng.Address,Type:=8) 
Row = Application.InputBox("Number of characters :", xTitleId, Type:=1) 
Char = Application.InputBox("Specify a character :", xTitleId, Type:=2) 
Set OutRng = Application.InputBox("Out put to (single cell):", xTitleId, Type:=8) 
Set OutRng = OutRng.Range("A1") 
Num = 1 
For Each Rng In InputRng 
Val = Rng.Value 
OutVal = "" 
For Index = 1 To VBA.Len(Val) 
    If Index Mod Row = 0 And Index <> VBA.Len(Val) Then 
     OutVal = OutVal + VBA.Mid(Val, Index, 1) + Char 
    Else 
     OutVal = OutVal + VBA.Mid(Val, Index, 1) 
    End If 
Next 
OutRng.Cells(Num, 1).Value = OutVal 
Num = Num + 1 
Next 
End Sub 
+0

这只是增加了一个逗号前7位后,我需要有这样每7位数字,只要有7. – Jonorl

+0

倍数@Jonorl看到编辑 – krib

0

假设字符串在A2中,那么试试这个... 在B2

=SUBSTITUTE(A2,LEFT(A2,7),LEFT(A2,7)&"|") 

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

+0

'SUBSTITUTE'好于我的初步想法 – krib

+0

这些都不能回答这个问题。 OP指出,有可能是在一个单元中的任何数量的订单号码,所以你可能需要插入5管'|',如果有6个订单号... – CallumDA

+0

这是有道理的。这一要求并不完全了解。 :) – sktneer

1

你可以用一个公式复制翻过上下,但会与预期的分裂有关,可以使用沿着这些线的东西,在我的例子中,在b1到z1中。

=MID($A1,IF(COLUMN()-2=0,1,((COLUMN()-2)*7)+1),7)

enter image description here

相关问题