2013-11-23 50 views
0

我目前正試圖找到解決方案來處理包含一對信息的單個excel字段。我會告訴你什麼可以包含這些區域的例子:從單個字段中提取多個數據

Field A1 : Coral Helm 7.154€ 21-22.12.13 

Field A2 : Wall of Spear 5€8-15.10.11 

Field A3 : Clockwork Avian TBD 12-15.12.12 

Field A4 : FellwarStone4-14-8.12.13 

Field A5 : YotianSoldierTBD15-8-13 

所以要解釋一下,基本上這是一個卡的價格,與像21-22.12.13一系列日期從21.12意思.13至22.12.13。 正如你所看到的,有時單詞之間沒有空格,所以我不能簡單地使用LEFT(),MID(),RIGHT()函數。

我在網上搜索,以檢查是否可以通過只使用Excel公式,但它似乎更好地使用VBA來處理這類問題。 如果有人有關於如何處理這個問題的想法,它可能會很好。

+0

第一條建議:在單元格中找到TBD或€並將其分成2個字符串...並且您可以從那裏... –

+0

您希望作爲輸出結果是什麼?你的問題不清楚,你能否詳細說明一下? – PKumar

+0

我需要提取excel中的3個信息單元格:描述/價格/日期 – Sindar

回答

0

通過RegExp對象嘗試使用Regular Expressions,通過進入VBA IDE,單擊工具--->參考...並選中「Microsoft VBScript Regular Expressions 5.5」旁邊的框,可以將其包含到VBA項目中。

以下圖案可以匹配和分裂每次除了「FellwarStone4-14-8.12.13」中列出的項目:

"^([\w\s]+?(?=\s*TBD|\s*[0-9.]+€))\s*(TBD|[0-9.]+€)(.+)$" 

下面是如何使用RegExp對象的示例:

Public Sub SplitCell(cellvalue As String) 
    Dim oRegExp As New RegExp 
    Dim oMatches As MatchCollection 
    Dim oMatch As Match 
    Dim submatches() As String 
    With oRegExp 
     .Pattern = "^([\w\s]+?(?=\s*TBD|\s*[0-9.]+€))\s*(TBD|[0-9.]+€)\s*(.+)$" 
     .Global = True 
     .IgnoreCase = False 
     .Multiline = False 
     Set oMatches = .Execute(cellvalue) 
    End With 
    If oMatches.Count <> 0 Then 
     MsgBox "Description: """ & oMatches.Item(0).submatches.Item(0) & """" 
     MsgBox "Price: """ & oMatches.Item(0).submatches.Item(1) & """" 
     MsgBox "Date: """ & oMatches.Item(0).submatches.Item(2) & """" 
    Else 
     MsgBox "Could not split cell value! It did not match the pattern." 
    End If 
End Sub 
+0

只有一個問題,如果卡名稱中有數字,會發生什麼情況? – Sindar

+0

@Sindar它的工作原理除非這個數字與價格一致。那麼在沒有知道價格應該是什麼的情況下,對於人類或計算機來說,就沒有辦法說出來。例如,如果中間有一個空格,「China Vase3 4.34€12-15.12.12'可以正常工作,但對於」中國花瓶34.34€12-15.12.12',正則表達式將匹配「34.34」 。沒有辦法知道3不是價格的一部分。 – Blackhawk

相關問題