vba - Excel 2016 - 将随机文本和数字的字符串拆分为单独的列?
问题描述
这是一个有趣的问题,我还没有找到答案。
我有一个从 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\])
https://regex101.com/r/b9rdEH/1([a-z])([0-9])
https://regex101.com/r/rYtU1Z/1
因此,以下内容应该适用于您的字符串。
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
推荐阅读
- java - 无法从类方法更改对象的值
- python - 将计数器值更改为字符串
- spring-webflux - 从 Mono/Flux 到 Flow 的 flatMapMany 和 flatMap 的等价性(Kotlin Coroutines)
- python - 每天运行一次 Python 脚本
- azure - 逻辑应用不会在函数创建时触发
- python - 将数据追加/添加到 scikit iris 数据集
- flutter - StatefulWidget:使用上下文请求的导航器操作
- c - 如何在结构内将 char[] 分配给 null
- vue.js - 显示带有条件计算属性的输入
- java - 什么是 JPA 悲观显式 @Lock 用例(只有 @Transactional 不是一个选项)?