2017-04-06 2113 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

相關問題