VBA 单一单元格的多行内容拆分为多行
生活随笔
收集整理的這篇文章主要介紹了
VBA 单一单元格的多行内容拆分为多行
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
多行拆分需求
假如一個單元格包含多行信息,比如說一些唯一的ID信息,我需要將該列的這些多行信息進行拆分,將其拆分為多行,其余列信息進行復制。例如如下圖所示的示例。
可以看到,該Excel表格的A列每一行都有兩行的數據,而我們的目的就是把這七行進行拆分為十四行,每一行包含單元格內單行的一條信息,其余列的文件進行復制,如下圖所示。
解決方案
在這里提供一個可設定的解決方案,也是一個SUB子程序。源代碼如下。
Sub SplitCopyValues()Dim arr As VariantDim rcount As LongDim ArrayLength As Integerrcount = Cells(Rows.Count, "A").End(3).Row 'Get the row num of last rowFor r = rcount To 1 Step -1 'Traversearr = Split(Cells(r, "A").Value, Chr(10)) 'split each item by spaceArrayLength = UBound(arr) - LBound(arr) + 1 'calculate the array lengthFor i = 1 To ArrayLength - 1Rows(r & ":" & r).CopyRows(r + 1 & ":" & r + 1).Insert Shift:=xlDown 'insert the copied one into row+1Next iCells(r, "A").Resize(ArrayLength, 1).Value = WorksheetFunction.Transpose(arr) 'Filling in the Created rowsErase arr 'delete the arr for new oneNext rApplication.CutCopyMode = FalseEnd SubSplitCopyValues主要就是滿足了上述的多行拆分需求。我加了英文注釋已經附在了代碼里,非常簡單明了,此外,為了理解和大家更改方便,我再用中文對代碼進行詳細注釋。
在這里要注意的是Cells(Rows.Count, “A”).End(3).Row 中的3指的是向上搜索直到找到數據不同的消失位置。End()括號中的1、2、3、4分別代表向左、向右、向上、向下。END(x)表示從指定的單元格向左、向右、向上、向下最后一個有效RANGE。
下面是中文注釋的代碼:
Sub SplitCopyValues() 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).RowFor r = rcount To 1 Step -1 'Traverse 對每行的行數進行循環,從最后往前進行遍歷arr = Split(Cells(r, "A").Value, Chr(10)) 'split each item by space 將該單元格以Chr(10)為分隔符進行分割ArrayLength = UBound(arr) - LBound(arr) + 1 'calculate the array length 計算分割后的ARR的長度For i = 1 To ArrayLength - 1 '對Arr內的每個元素進行遍歷Rows(r & ":" & r).Copy '將該行進行復制Rows(r + 1 & ":" & r + 1).Insert Shift:=xlDown 'insert the copied one into row+1 '把復制的行插入到該單元格所在行的下一行Next iCells(r, "A").Resize(ArrayLength, 1).Value = WorksheetFunction.Transpose(arr) 'Filling in the Created rows 將arr轉置為列后插入到剛剛生成的哪些新的行中,也就是把A列填好Erase arr 'delete the arr for new oneNext rApplication.CutCopyMode = False '這是為了防止大規模復制粘貼而彈出系統默認的對話框End Sub希望該方法可以幫到你,有問題評論區見,我很快會回復。
總結
以上是生活随笔為你收集整理的VBA 单一单元格的多行内容拆分为多行的全部內容,希望文章能夠幫你解決所遇到的問題。