VBA如何提取字符串中省略号间的子串并输出到Excel列连续单元格
实现方案
你的原有代码存在几个问题:
- 函数内引用了未定义的
purpose变量,应该对应传入的brokenstr参数 - 循环逻辑只会保留最后一次提取的子串,无法存储所有分割结果
- 没有包含单元格写入的逻辑
以下是可直接运行的修正代码,你可以按需选择实现方式:
方案1:用Split函数实现(更简洁)
直接调用VBA内置的字符串拆分方法,无需手动查找分隔符位置:
Sub copyd() Dim splitArr As Variant Dim i As Long, startRow As Long ' 待处理的原始字符串 Dim sourceStr As String sourceStr = "...covid...is...very...scary" ' 按分隔符...拆分字符串 splitArr = Split(sourceStr, "...") ' 设定从A列第1行开始写入,可按需修改 startRow = 1 ' 遍历拆分结果,跳过空值写入单元格 For i = LBound(splitArr) To UBound(splitArr) If splitArr(i) <> "" Then Cells(startRow, "A").Value = splitArr(i) startRow = startRow + 1 End If Next End Sub
方案2:保留原有循环查找逻辑的修正版本
适配你原本的实现思路,补充单元格写入逻辑:
Sub copyd() Call findandcopy("...covid...is...very...scary") End Sub Sub findandcopy(brokenstr As String) Dim first As Integer, second As Integer Dim strtarget As String, resStr As String Dim writeRow As Long strtarget = "..." ' 从A列第1行开始写入,可按需修改 writeRow = 1 first = InStr(brokenstr, strtarget) Do While first > 0 second = InStr(first + 3, brokenstr, strtarget) If second = 0 Then Exit Do ' 提取两个分隔符之间的内容 resStr = Mid(brokenstr, first + 3, second - first - 3) ' 写入单元格 Cells(writeRow, "A").Value = resStr writeRow = writeRow + 1 ' 移动起始位置查找下一个分隔符 first = second Loop End Sub
使用说明
运行copyd宏后,提取的子串会依次写入当前工作表A列的连续单元格,对应值为covid、is、very、scary。如果需要修改写入的列,把代码里的"A"改成对应列标识即可,比如要写到C列就改成"C"。
内容的提问来源于stack exchange,提问作者user14436230
相关产品推荐
相关产品推荐

