2017-08-01 64 views
0

誰かが欲しいと思っている人は、私がやっていることに対してより良いアプローチを提供できるかもしれません。残念ながら、データとコードはクライアントシステム上にあるため、共有することはできません。VBA正規表現を使用して文字列を分割する

私はこれまでデータテーブルであったこの長い文字列を持ち、値を行と列に分割し直す必要があります。システムは重くロックされているので、私はVBAの使用に限られています。私が考えることができる最善の方法は、正規表現を使用して列と行を識別することです。正規表現オブジェクトを設定し、入力文字列に対して実行しました。必要なすべての一致が必要です。問題はそれが私の場合です。

re = CreateObject("VBScript.RegExp") 
re.pattern = mypattern 
re.split(myString) 

私が見る限り、私が分割している値を保持する方法はありません。とにかく、正規表現の文字列の途中で分割したい場合もあります。

私が考える最も有望な解決策は、私はちょうど区切り文字を挿入して、スプリットを使用して考えられ

re = CreateObject("VBScript.RegExp") 
re.pattern = mypattern 
Set matches = re.execute(myString) 
for each match in matches: 
    'do something with match.firstindex 

を行うことです。残念なことに、VBAは文字列に文字を挿入する方法がないようですが、firstindexを使用するにはちょっと厄介です。

もっと良いアプローチについて考えている人はいますか?もしそうなら大いに感謝します。

+4

ダミーデータがない場合は、ヘルプの仕方がわかりません。 –

+0

'matches'はオブジェクト参照である必要があり、' Set'キーワードを使って割り当てる必要があります。質問:あまり使い慣れていないAPIで初期バインディングを使用しているのはなぜですか? –

+0

あなたの考えをありがとう。後でデータ/文字列のより良い説明を共有しようとします。私は早期バインディングという言葉には触れていませんでしたが、私はそれを使用しているように見えます。私はちょうど私が実際に使用しているコードにアクセスできないので、stackoverflowエディタでコードの上に入力しました。はい、私はsetキーワードが必要と思います。 – soundofsilence

答えて

1

実際に文字列に文字を挿入できます。 「不格好」のあなたの定義に依存するが、ここでは例です:「|」は、細胞の5番目の文字で始まる

ActiveCell.Characters(5, 1).Insert (" | ") 

この置きます。あなたは、セル文字を使ってfindやいくつかのループを使っていくつかの位置を特定する必要があるかもしれませんが、あなたのところであなたを得るかもしれないと思います。

編集済みの文字列 これは私の好みですが、編集文字列があまりにもぎこちないように見えません。この設定を使用して、必要なものを得ることができます。

Sub StringSlicerSample() 
Dim teststring As String, Separater As String, tangoTxt As String, BeforeTXT As String, AfterTxt As String, MidTxt As String 
Dim Position_To_Slice As Integer 

teststring = "xxxbangyyy"  
Separater = " | " 'can be whatever you want as separator  
tangoTxt = "bang" 'text to look for that you want use for split 
Position_To_Slice = 1 'If you want to split somewhere in between, lets say after the "b" 
'put =1 as that's the first position in "bang" 

'Insert separator before 
BeforeTXT = Mid(teststring, 1, InStr(1, teststring, tangoTxt) - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt), Len(teststring)) 

'Insert after 
AfterTxt = Mid(teststring, 1, InStr(1, teststring, tangoTxt) + Len(tangoTxt) - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt) + Len(tangoTxt), Len(teststring)) 

'Split inbetween based on position to slice 
MidTxt = Mid(teststring, 1, InStr(1, teststring, tangoTxt) + Position_To_Slice - 1) & Separater & Mid(teststring, InStr(1, teststring, tangoTxt) + Position_To_Slice, Len(teststring)) 


MsgBox BeforeTXT, Title:="Before Example" 
MsgBox AfterTxt, Title:="After Example" 
MsgBox MidTxt, Title:="Sliced in position " & Position_To_Slice 

End Sub 
+0

ありがとう、それは便利です。私は、セル内で直接ではなく、VBA文字列に追加することを検討していました。私は彼の方法を利用するために少し私のアプローチを変更することができます。 – soundofsilence

+0

文字列を使用する場合は、更新された回答を参照してください。あまりにも複雑ではないようですね? – PGCodeRider

+1

私は答えとして受け入れるだろう、私はこれが私が想像できる最良のアプローチだと思う。私が働いていたデータの種類を賢明に推測するための+1 – soundofsilence

関連する問題