2017-12-14 5 views
1

私は文字列を分割して区切り文字を保持する関数を開発してきました。デリミタを分割して保持する

Function SplitButRetainDelims(ByVal text As String, ByVal delimiters As String) As String() 

    Dim Arr() As String, currentDelim As String 
    Dim i As Long 

    For i = 1 To Len(delimiters) 
     currentDelim = Mid$(delimiters, i, 1) 
     Arr = Split(Replace(text, currentDelim, currentDelim & "~"), "~") 
    Next 

    SplitButRetainDelims = Arr 

End Function 

問題は、私は今それを持っている方法は、

Arr = Split(Replace(text, currentDelim, currentDelim & "~"), "~") 

は、現在の区切り文字からのみ分割して配列するたびに上書きされることです。したがって、以前の繰り返しが行われたという進捗状況を維持する代わりに、リセットされます。

これまで私は容認できる解決策に慣れてきましたが、多くの利益をもたらすにはあまりにも関わっていました。

編集:例

SplitButRetainDelims("potato (onion/soup/Green BEANS", "()/") 
= ("potato", " ", "(", "onion", "/", "soup", " ", "/", "Green", " ", "BEANS") 
+0

をいくつかのテストデータと期待出力を提供してください。 –

答えて

2

すべて交換後までの分割をしない:

Function SplitButRetainDelims(ByVal text As String, ByVal delimiters As String) As String() 

    Dim Arr() As String, currentDelim As String 
    Dim i As Long 

    For i = 1 To Len(delimiters) 
     currentDelim = Mid$(delimiters, i, 1) 
     text = Replace(text, currentDelim, "~" & currentDelim & "~") 
    Next 
    text = Replace(text, "~~", "~") 
    Arr = Split(text, "~") 
    SplitButRetainDelims = Arr 

End Function 

enter image description here

+0

これは正しい方向への良い一歩です。デリミタを自分の "セル"に強制することも可能です – Marcucciboy2

+0

@ Marcucciboy2次にスプリット値で区切り文字をラップする必要があります。編集を参照してください。 –

+0

ありがとう、スコット、あなたは私の英雄です – Marcucciboy2

関連する問題