Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba Excel 2016-将随机文本和数字字符串拆分为单独的列?_Vba_Excel - Fatal编程技术网

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

Vba Excel 2016-将随机文本和数字字符串拆分为单独的列?,vba,excel,Vba,Excel,这是一个有趣的问题,我还没有找到答案 我有一个从Python刮板导出的CSV文件,它可以获取MLB每日分数结果。我遇到的唯一问题是,输出在单元格A1中创建了一个类似于以下内容的字符串: Washington3FinalPhiladelphia1Washington7Final (10)Philadelphia6Houston5FinalDetroit4LA Dodgers1FinalCincinnati3Oakland3FinalBaltimore2Cleveland2FinalTampa Ba

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

我有一个从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....
请注意,当一场比赛进入额外的局数时,它会将局数括在括号中。我还将在下面的后续行中列出这些每日分数数据,因此最好在整个工作表中循环


有什么想法吗?非常感谢

您可以使用正则表达式来实现这一点

并替换以下两种模式:

  • (\[a-z\]\[0-9\]\])(\[a-z\])
  • ([a-z])([0-9])
因此,以下内容适用于您的字符串

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

工作得很好。非常感谢!节省了我很多时间