我已经做了很多研究来弄清楚这一点,但所有的答案都需要用所有逗号拆分所有数据(即,每次出现逗号时,它都会被拆分)或知道逗号的确切位置(即,它是第三个逗号)。
我需要的是比这更多的变量。我在一个单元格的列表中导出数据,其中需要保留在同一单元格中的数据用逗号和空格分隔(例如,“狗,猫”而不是“狗,猫”)。我需要在后者(“狗,猫”)而不是前者(“狗,猫”)进行拆分。根据数据本身,这种情况发生的次数会有所不同。
例如,一个细胞可能会这样说:
狗走路、说话和摇尾巴,猫喵喵叫、嘶嘶声和呼噜声,鹦鹉嘎嘎叫和说话,鸭子嘎嘎叫和说话
我需要它看起来像这样:
单元 1:狗散步、交谈和摇尾巴
单元 2:猫叫、嘶嘶声和呼噜声
单元 3:鹦鹉叫声和谈话
第四单元:鸭子嘎嘎叫和说话
但另一个单元格会有不同的单词和不同的逗号位置。
有什么办法可以做到这一点?
谢谢你!!
答案1
当我必须做这样的事情时,我使用了查找和替换在分隔列之前暂时“隐藏”字符组合的功能。
该过程基本上是这样的:
- 选择所有要拆分成列的文本。
- 使用查找和替换将所有逗号空格组合更改为数据中找不到的其他内容(我通常使用类似的
@@@
)。 - 跑过文本分列函数,按逗号拆分。
- 选择所有新创建的列。
- 跑过查找和替换再次,但将其反转,以便它们
@@@
变回逗号空格对。
答案2
这是实现 techturtle 解决方案的 VBA 宏。选择您想要处理的单元格并运行这个简短的宏:
Sub splitText()
Dim rng As Range, r As Range, a As Variant, i As Long
Set rng = Selection.Cells.SpecialCells(2)
For Each r In rng
v = r.Value
If InStr(1, v, ",") > 0 Then
ary = Split(Replace(v, ", ", Chr(1)), ",")
i = 1
For Each a In ary
r.Offset(0, i).Value = Replace(a, Chr(1), ", ")
i = i + 1
Next a
End If
Next r
End Sub
原始数据未受影响。
笔记:
此代码特定于包含常量而非公式的单元格。