[英]Excel Split cell with multiple lines into rows for entire table
在Excel(2016)中,我有一些看起来像这样的数据:
基于特定列,在此示例中为“ IPAddress”列,如果单元格中有多行,则将字符串分成新行,然后将剩余数据复制到该行。
这是脚本或任何其他内容完成后要寻找的东西。
我正在使用以下代码:将具有多行的单元格拆分为行
Sub tes_5()
Dim cell_value As Variant
Dim counter As Integer
'Row counter
counter = 1
'Looping trough A column define max value
For i = 1 To 10
'Take cell at the time
cell_value = ThisWorkbook.ActiveSheet.Cells(i, 1).Value
'Split cell contents
Dim WrdArray() As String
WrdArray() = Split(cell_value, vbLf)
'Place values to the B column
For Each Item In WrdArray
ThisWorkbook.ActiveSheet.Cells(counter, 2).Value = Item
counter = counter + 1
Next Item
Next i
End Sub
这样可以分隔IPAddress列,但不会在新行中添加其他单元格的数据。
文本到列不起作用和Power Query( https://www.quora.com/Is-there-a-way-in-excel-to-bulk-split-cells-with-multiple-lines-inside-into -新的行,且没有覆盖下面的现有数据 )也不起作用。
还有其他建议吗?
更新:刚刚了解到,默认情况下,Excel在定界符字段的开头放置了一个逗号,这导致我在选择换行时定界符不起作用。
如果删除前导逗号,则“应该”(就像我一样),获得所需的结果。
假设您的数据从A2开始,请尝试以下操作:
Sub x()
Dim r As Long, v As Variant
For r = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
v = Split(Cells(r, 4), vbLf)
If UBound(v) > 0 Then
Cells(r + 1, 1).Resize(UBound(v), 4).Insert shift:=xlDown
Cells(r + 1, 1).Resize(UBound(v), 3).Value = Cells(r, 1).Resize(, 3).Value
Cells(r, 4).Resize(UBound(v) + 1).Value = Application.Transpose(v)
End If
Next r
End Sub
使用Power Query非常简单
您需要做的就是将IPAddress
列按换行符拆分为Rows
用户界面中的“拆分列”对话框
M代码
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Server Name", type text}, {"Serial Number", type text}, {"OS", type text}, {"IPAddress", type text}}),
#"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(#"Changed Type", {{"IPAddress", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "IPAddress")
in
#"Split Column by Delimiter"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.