2012-01-09 14 views
-1

私はB列にデータの下の文字列を持っています。Excel VBA 2007を使用してテキストを別の列に移動したいと思います。以下の例では、 "ただし、2つまたは3つのデータグループが存在する場合もあります。Excel VBA - テキストを列に

例4グループ:

InstrumentBaseClass..Mega~Corporate~InstrumentBaseClass..Mid~Energy~InstrumentBaseClass..Micro~Oil Field Services 

例2グループ:私は別の列にテキストを設定することができ、データの唯一の2セットがある場合は、2次の列が言うようにどのように

InstrumentBaseClass..Mega~Corporate 

"なし"? 3つのデータセットがある場合は、「none」という1つの列などが必要です。

+2

解決としてあなたの質問をマークすることを忘れないでください、あなたは過去にそうすることを怠ってきました。 – Reafidy

+0

@rjk:[何を試しましたか?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) –

答えて

0

プログラムのない簡単な方法は、4つの列すべてにnoneを入力してから、列のテキストを「必要なし」に上書きすることです。

0

次のコードでは、ハードコードされた入力を使用していますが、これは範囲参照で置き換えることも、サブを呼び出す際に可変要素として渡すこともできます。

Sub TextDotColumns() 

Dim sInput As String, sMid As String, rOutput As Object 'these should be passed when calling sub 
Dim lBreak As Long, lColOff As Long, sCheck As String 

sInput = "InstrumentBaseClass..Mega~Corporate~InstrumentBaseClass..Mid~Energy~InstrumentBaseClass..Micro~Oil Field Services" 
sCheck = ".." 
Set rOutput = Range("d10") 

lBreak = InStr(1, sInput, sCheck, vbTextCompare) 
rOutput.Select 
lColOff = 1 
Do While lBreak > 0 
    sMid = Mid(sInput, 1, lBreak - 1) 
    rOutput.Offset(1, lColOff).Value = sMid 
    sInput = Right(sInput, Len(sInput) - lBreak - 1) 
    lColOff = lColOff + 1 
    lBreak = InStr(1, sInput, sCheck, vbTextCompare) 
Loop 

rOutput.Offset(1, lColOff).Value = sInput 

End Sub 
0

これを試してみてください。

Sub Test() 

    '// Assumes your range is in column A 
    With Range("A2", Cells(Rows.Count, "A").End(xlUp))   
     '// Text to columns 
     .TextToColumns Destination:=.Offset(, 1), DataType:=xlDelimited, _ 
     TextQualifier:=xlNone, ConsecutiveDelimiter:=True, Other:=True, OtherChar:="." 

     '// Fill blank spaces with "None" 
     .Offset(, 1).Resize(, 4).SpecialCells(xlCellTypeBlanks).Value = "None" 
    End With 

End Sub