2012-09-23 41 views
0

在這種情況下,我想提取單元格中的開始文本並保持其餘部分不變。 例如一系列單元包含:如何從單元中提取特定文本?

2nd Unit. Miami 
3rd Production Staff. Toronto 
1st Ad. San Francisco 

我想打破這件事沒有因爲之前的行格式不同,這些最後幾排是我想要處理異常使用文本列。

我認爲正則表達式可能會這樣做,但這似乎有點複雜。

我的算法思想是: 1.搶想要的文本(什麼功能或自定義子要這麼做?) 2.過去的文本到它的新位置 3.切斷從細胞的文字,留下剩餘文本。

看起來很簡單,但我依然在通過VBA森林尋找方式,而且我正在以最快的速度完成它。但這似乎是學習一些VBA技巧的好機會。

TIA

更新: 我想借此文達,並將其移動到不同的列,保持其餘的地方是「\」。

+0

你是什麼意思的「開始文本」?第一個字符?第一個詞(達到一個空格)?直到第一個'。'?或者是什麼? –

回答

2

由於您似乎想要修改單元格文本,因此需要使用VBA。

內部循環,設置cl的細胞進行處理:

str = cl.value 
i = Instr(str, ".\") 
cl = Trim(Mid$(str, i + 2)) ' assuming you want to exclude the ".\" 
cl.Offset(0, 1) Trim(Left$(str, i - 1)) ' Places the original first part one cell to the right 
+0

非常好。謝謝。 –

3

VBA是不必要的。在單元格A1:=MID(A1,FIND(".\",A1,1)+2,LEN(A1))中的。\之後獲取文本,以便在A1:=LEFT(A1,FIND(".\",A1,1)-1)之前獲取文本。

作爲附加信息,Find返回.\出現的字符串中的位置。在VBA中相當於InStr。如果.\不在單元格中,它將顯示#VALUE,因爲我沒有打擾添加錯誤檢查。

+1

我想要的文本包括。[空間],提取它並留下餘數,因此我需要VBA。 –

0

對於任何人的緣故誰了同樣的問題,這裏是經過全面測試,工作代碼。

Function RE6(strData As String) As String 
    Dim RE As Object, REMatches As Object 

    Set RE = CreateObject("vbscript.regexp") 
    With RE 
     .MultiLine = False 
     .Global = False 
     .IgnoreCase = True 
     .Pattern = "[0-9][0-9][0-9][0-9]B" 
     RE6 = .test(strData) 
    End With 

    Set REMatches = RE.Execute(strData) 
    If REMatches.Count > 0 Then 
     RE6 = True 
    Else 
     RE6 = False 
    End If 
End Function 

Sub territory() 
Dim strTest As String, str As String, cl As Range 
    strTest = ActiveCell.Value 
    Set cl = ActiveCell 
    If RE6(strTest) = True Then 
     str = cl.Value 
     i = InStr(str, ". ") 
     cl = Trim(Mid$(str, i + 2)) 
     cl.Offset(0, 1) = Trim(Left(str, i - 1)) 
     cl.Offset(0, 2) = "Instance" 
     MsgBox RE6(strTest) 
    End If 
End Sub 
相關問題