Excel 2016-将随机文本和数字的字符串拆分为单独的列?

时间:2018-09-13 03:53:31

标签: excel vba excel-vba

这是一个有趣的问题,我还没有找到答案。

我有一个从Python抓取器导出的CSV文件,该抓取器抓取了MLB每日得分结果。我唯一的问题是输出会在单元格A1中创建一个类似于当天的字符串:

Washington3FinalPhiladelphia1Washington7Final (10)Philadelphia6Houston5FinalDetroit4LA Dodgers1FinalCincinnati3Oakland3FinalBaltimore2Cleveland2FinalTampa Bay0Toronto2FinalBoston7Miami5FinalNY Mets3Milwaukee0FinalChi Cubs3NY Yankees5FinalMinnesota10Chi White Sox3FinalKansas City6Pittsburgh5FinalSt. Louis11Arizona6FinalColorado3Texas0FinalLA Angels1San Diego2FinalSeattle1Atlanta4FinalSan Francisco1

因此,仅从头开始看,理想情况下,我喜欢的是VBA脚本或函数,该脚本或函数将每条数据分成各自的列,以便我可以从那里更轻松地操作数据。所以我想要一个看起来像这样的输出:

Washington | 3 | Final | Philadelphia | 1 | Washington | 7 | Final (10) | Philadelphia | 6 | etc....

请注意,当游戏进入额外局时,它将局数包装在方括号中。我还将在此行之后的后续行中列出这些每日得分数据,因此在整个工作表中循环比较理想。

有什么想法吗?非常感谢!

1 个答案:

答案 0 :(得分:1)

您可以为此使用正则表达式。

并替换以下2种模式:

因此以下内容适用于您的字符串。

Option Explicit

Public Sub SplitTest()
    Dim SplitString As String
    SplitString = SplitCaps(Range("A1").Value)

    Debug.Print SplitString 'show splitstring in intermediate window

    'split into array and output into cell
    Dim SlitArray() As String
    SlitArray = Split(SplitString, "|")
    Range("B1").Resize(1, UBound(SlitArray) + 1).Value = SlitArray
End Sub

Public Function SplitCaps(InputString As String) As String
    Dim objRegex As Object
    Set objRegex = CreateObject("vbscript.regexp")
    With objRegex
        .Global = True
        .Pattern = "([a-z]|[0-9]|\))([A-Z])" 'https://regex101.com/r/b9rdEH/1
        SplitCaps = .Replace(InputString, "$1|$2")

        .Pattern = "([a-z])([0-9])" 'https://regex101.com/r/rYtU1Z/1
        SplitCaps = .Replace(SplitCaps, "$1|$2")
    End With
End Function