实例需求:对于B列的非规则合并单元,将对应的A列单元格内容合并,并保存在B列中。
虽然在无数经典图书和文章中都告诫大家,合并单元格是数据分析的绊脚石,但是仍有无数数据分析行业的“烈士”仍然前赴后继的继续跳进这个广为人知的坑。无论如何,既然已经存在这样的数据表了,如何处理呢?
办公室的小姐姐遇到这样的难题,肯定有自称电脑高手的帅锅英雄救美。A列数据粘贴到记事本,然后再分段拷贝到B列单元格,so easy …
此时,小姐姐在工作表中向下拖动滚动条发现100万行数据,帅锅立马不见踪影了…
换做你,如果甩出这段代码,点一下鼠标瞬间完成,接下来如何约小姐姐,就看你的了,呵呵
Sub Demo()
For i = 2 To Cells(Rows.Count, 1).End(xlUp).Row
If Cells(i, 2).MergeCells Then
n = Cells(i, 2).MergeArea.Cells.Count
arr = Application.Transpose(Cells(i, 1).Resize(n, 1).Value)
Cells(i, 2) = Join(arr, Chr(10))
i = i + n - 1
Else
Cells(i, 2) = Cells(i, 1)
End If
Next
End Sub
【代码解析】
第2行代码获取A列有数据的最后单元格的行数。
第3行代码判断第2列指定单元格是否为合并单元格。
第4行代码获取合并单元格区域所包含的单元格个数。
第5行代码就合并单元格对于的A列单元格区域内容转置后读入数组。
第6行代码将数组内容组合一个字符串,使用软回车作为分隔符,并赋值给第2列单元格。
如果第2列指定单元格并不是合并单元格,那么第9行代码将把A列对应单元格内容复制到B列。