【发布时间】:2017-11-08 18:34:58
【问题描述】:
嗨,我有这个来自地狱的数据集。当我得到数据时,字段会不均匀地溢出列。所以可能有一些行有 3 列、4 列或 5 列
这是数据
o o x y
o o o x y
o o oxo y
o o y
清理所需数据
oo x y
ooo x y
oo oxo y
o o y
我想做的是
- 逐行读取直到检测到 x
- 连接第一列的所有 O
- 删除所有其他 O,以便 x 和 y 可以向左移动
- 有时 x 可能包含在其他文本中
- 有时甚至可能根本没有 x。然后我会跳到下一行而不是无限循环
我在论坛上下搜索过,但我能找到的最接近我的问题的是 How to concatenate cells in a row until the first blank cell 可悲的是,那里没有共享 where 而不是空白单元格作为特定值的最终答案。
我用我在 VBA 中的粗略技能试试运气,但是呃...我想我最终会更加困惑自己,嘿嘿
Sub x()
Dim n As Long, r1 As Range, r2 As Range, v
For n = 1 To Range("A" & Rows.Count).End(xlUp).Row
On Error Resume Next
Rng.SpecialCells(xlCellTypeConstants).Select
If Not r1 = "x" And Not r2 Is Nothing Then
v = Join(Application.Transpose(Application.Transpose(r1)), " ")
Cells(n, 2).Resize(, r1.Count).Clear
r2.Cut Cells(n, 3)
End If
ActiveCell.Offset(1, 0).Select
Next n
End Sub
` 任何帮助都会非常感谢这里
【问题讨论】:
-
这是我不明白的地方,为什么 o oox y 应该是 o o y(最后一行)而 o o oxo y 应该是 oo oxo y(倒数第二行)?
-
抱歉,我在最后一行打错字了。它应该是o o y
-
倒数第二行是因为 x 可能被包裹在其他字符串中,因此当看到 oxo 时循环应该停止