|
楼主 |
发表于 2023-2-20 23:34
|
显示全部楼层
代码如下
Sub 单一单元格的多行内容拆分为多行()
Dim arr As Variant ' arr 存储要分裂的单元格的内容
Dim rcount As Long ' rount 就是有效的行数
Dim ArrayLength As Integer ' arr的长度,n行长度就为n
'Get the row num of last row 拿到有效的行数,具体操作为:Cells(Rows.Count," A ") 拿到A列的工作簿的最底下一个单元格(包括空)
'.End(3) 的目的是从最底下的单元格向上寻找,找到第一个非空的单元格
'.Row的目的是记录刚刚那个单元格的行数
rcount = Cells(Rows.Count, "A").End(3).Row
For r = rcount To 1 Step -1 '对每行的行数进行循环,从最后往前进行遍历
arr = Split(Cells(r, "E").Value, Chr(10)) ' 将该单元格以Chr(10)为分隔符进行分割
ArrayLength = UBound(arr) - LBound(arr) + 1 '计算分割后的ARR的长度
For i = 1 To ArrayLength - 1 '对Arr内的每个元素进行遍历
Rows(r & ":" & r).Copy '将该行进行复制
Rows(r + 1 & ":" & r + 1).Insert Shift:=xlDown '把复制的行插入到该单元格所在行的下一行
Next i
Cells(r, "E").Resize(ArrayLength, 1).Value = WorksheetFunction.Transpose(arr) '将arr转置为列后插入到刚刚生成的哪些新的行中,也就是把A列填好
Erase arr
Next r
Application.CutCopyMode = False '防止大规模复制粘贴而弹出系统默认的对话框
End Sub
|
|