在Excel VBA中分隔字符串

时间:2013-01-26 00:20:02

标签: regex excel vba csv excel-vba

我有一系列(成千上万)的通话记录,我试图创建一个电子表格。它们都在文本文件中。格式如下:

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 $ - $ - $ -

月/日/年/城市呼叫,STATE HH:MM APM 123- 456 7890 OptionalCode $ Charge $ Tax $ Total

这是减去细节,直接来自文件。字符串周围没有引号,没有标签。我试图将文字用于专栏,但有些城市确实有空间而其他城市则没有。

有人想指出我正确的方向吗? RegEx也许(我听说但从未使用过)?还有别的吗?

更新 感谢您的早期反馈。该行是我文件中的实际数据,但我删除了城市和电话号码。我已更新了城市信息,以显示那里的差异。我可以看到,没有一个城市名称有逗号,但我总共处理了近120,000行,显然,我们都没有检查过它们。

这座城市显然不会总是有空间 - 但是,Syracuse不会,纽约也是如此。月份和日期也不总是2位数 - 这也会导致检查长度。我可以先读取,然后读取第二个正斜杠 - 这些都是在日期和月份值之后修复的。

括号中的代码并不总是出现......有时它会出现,有时候不会出现,但是当它们到达时似乎只有一个字母。

我希望这可以解决一些问题。如果首先正确存储,这将更容易。叹息。

更新2,3& 4 根据Robin的请求在通话记录更改中添加了几行。

2 个答案:

答案 0 :(得分:3)

我知道您要求提供VBA解决方案,但我的呼叫记录仅在包含公式的电子表格中进行解析。

我上传了工作簿解决方案here (version 3)

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

公式适用于月,日,年,城市,州,时间,代码,费用,税金和总金额的任何变化。

让我知道是否有任何线条破裂。您可以使用标题中的AutoFilter下拉列表轻松检查这些内容,以选择错误/无关值。在您的问题中附加任何违规行。

<强>更新

版本2负责“城市”字段包含位置名称,“状态”字段为空白的情况。

版本3负责电话号码字段包含分机号码或名称的情况。

答案 1 :(得分:1)

如果城市名称中没有逗号,则此类内容可能会有效。

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