在Excel VBA中分隔一个string

我有一个系列(成千上万)的通话logging,我试图创build一个电子表格。 他们都在一个文本文件。 格式如下所示:

12/ 13/ 05 Syracuse, NY 10: 22 AM 111- 111- 1111 2 $ - $ - $ - 12/ 13/ 05 New York, NY 10: 28 AM 111- 111- 1111 (F) 2 $ - $ - $ - 12/ 13/ 05 Orlando, FL 10: 48 AM 111- 111- 1111 (F) 4 $ - $ - $ - 3/ 9/ 09 Internal 4: 51 PM 111- 111- 1111 (E) 23 $ - $ - $ - 10/ 14/ 11 Colorado Site 8: 12 AM 111- 111- 1111 14 $ - $ - $ - 1/ 3/ 12 Dept 27 3: 16 PM 111- 111- 1111 (F) 93 $ - $ - $ - 11/ 12/ 12 Internal 3: 13 PM 18765 (E) 16 $ - $ - $ - 11/ 14/ 12 Internal 11: 43 AM John Doe 3 $ - $ - $ - 

月/日/年/城市呼叫状态HH:MM APM 123- 456 7890可选代码$收费$税收$总计

这是直接从文件减去细节。 string没有引号,没有选项卡。 我试图使用文本到列,但一些城市有空间,其他城市没有空间。

任何人都想指出我正确的方向? 正则expression式也许(我听说过,但从来没有使用过)? 别的东西?

更新:感谢您的早期反馈。 该行是我的文件的实际数据,但我剥离了城市和电话号码。 我已经更新了城市信息以显示那里的变化。 尽我所能看到,这个城市的名字都没有逗号,但是我总共处理了近12万行,而且显然没有全部检查。

这个城市显然并不总是有一个空间 – 但是,纽约不是纽约的锡拉库扎。 月份和date,也不总是2位数字 – 这也抛出检查长度。 我可以先阅读,然后第二个正斜杠 – 这是在date和月份值之后修正的。

而且括号内的代码并不总是显示出来…有时它在那里,有时候不是,尽pipe它们在到达时似乎只有一个字母。

我希望这清除了一些东西。 如果它被正确地存储在第一位,这将会容易得多。 叹。

更新2,3和4根据Robin的请求在呼叫日志更改中添加了几行。

我知道你问了一个VBA解决scheme,但是我只是在电子表格中用公式parsing我的通话logging。

我在这里上传了一个工作簿解决scheme(版本3) 。

打开工作簿后,将文本文件的内容复制并粘贴到单元格A2 。 然后尽可能填写范围B2:X2

公式将与月份,date,年份,城市,州,时间,代码,费用,税款和总额的任何变化一起使用。

让我知道,如果任何线路突破。 您可以使用标题中的“自动筛选”下拉菜单轻松检查这些内容,以select错误/无关值。 在您的问题中附加任何违规行。

更新:

版本2负责处理城市字段包含地点名称和州字段为空的情况。

版本3处理电话号码字段包含分机号码或姓名的情况。

如果城市名称中没有逗号,这样的东西可能会起作用。

 Sub foo() thisLine = "12/ 13/ 05 City Name, ST 10: 28 AM 111- 111- 1111 (F) 2 $ - $ - $ -" thisDate = Mid(thisLine, 1, 10) thisLine = Mid(thisLine, 12) firstComma = InStr(1, thisLine, ",") City = Mid(thisLine, 1, firstComma - 1) thisLine = Mid(thisLine, firstComma + 2) State = Left(thisLine, 2) thisLine = Mid(thisLine, 4) thisTime = Left(thisLine, 9) thisLine = Mid(thisLine, 11) thisPhone = Left(thisLine, 14) thisLine = Mid(thisLine, 16) tempArray = Split(thisLine, "$") If UBound(tempArray) = 3 Then optionalCode = tempArray(0) charge = "$" & tempArray(1) tax = "$" & tempArray(2) Total = "$" & tempArray(3) Else ' throw an error something went wrong End If End Sub