2013-11-23 22 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

相关问题