2012-01-09 51 views
-1

我在B列中有下面的數據字符串。我想使用Excel VBA 2007將文本轉換爲不同的列。在下面的示例中,有4組數據,除以「.. 」。但是,也可以有2或3組數據。Excel VBA - 文本分欄

實施例4組:

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

實施例2組:

InstrumentBaseClass..Mega~Corporate 

我怎樣才能設置文本到不同的列,使得如果只有2個組數據,以下兩個列說「沒有」?如果有3組數據,我需要一列「無」,依此類推。

+2

不要忘記,以紀念你們的問題解決了,你忽略了,在過去這樣做。 – Reafidy 2012-01-09 23:32:42

+0

@rjk:[你試過了什麼?](http://mattgemmell.com/2008/12/08/what-have-you-tried/) – 2012-01-10 07:34:52

回答

0

一個簡單的,沒有編程的方式是簡單地填充所有4列沒有,然後讓文本列功能寫任何'它的需要。

0

以下代碼使用硬編碼輸入,但可以使用區域引用替換它,或者在調用sub時將其作爲變量傳遞。

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