我有一个电子表格,其中的数据位于用换行符分隔的单个单元格中。我需要将单元格分成单独的行,以便我可以删除一些数据并重新组合。像这样:
| 物品 | 地位 | 
|---|---|
| 285T1150-3 | 285T0680-1 1 完整 285T1145-7//D 1 ATS-182 285T1146-1//D 1 完整 363A4872P4 1 无路由器  | 
转换成这样:
| 物品 | 地位 | 
|---|---|
| 285T1150-3 | 285T0680-1 1 完整 | 
| 285T1150-3 | 285T1145-7//D 1 ATS-182 | 
| 285T1150-3 | 285T1146-1//D 1 完整 | 
| 285T1150-3 | 363A4872P4 1 无路由器 | 
这是我一直在使用的代码:
        check_col = colArray(0)
        ColLastRow = Range(check_col & Rows.Count).End(xlUp).Row
        For Each Rng In Range(check_col & "1" & ":" & check_col & ColLastRow)
            If InStr(Rng.Value, vbLf) Then
                Rng.EntireRow.Copy
                Rng.EntireRow.Insert
                
                For i = 0 To UBound(colArray)
                    c = colArray(i)
                    
                    Set currentrng = Range(c & Rng.Row)
                    Set upperRng = currentrng.Offset(-1, 0)
                
                    upperRng.Value = Mid(currentrng.Value, 1, InStr(currentrng.Value, vbLf) - 1)
                    currentrng.Value = Mid(currentrng.Value, Len(upperRng.Value) + 2, Len(currentrng.Value))
                Next i
            End If
        Next
Run Code Online (Sandbox Code Playgroud)
效果完美。只是需要很长时间。有时长达5-8分钟。有没有一种方法可以简化它,使其运行得更快一点?
我强烈推荐 PowerQuery 来完成手头的任务:
对于这种特定的数据转换,Power Query 似乎(而且确实)比评论中提到的JvdV等 VBA 更强大/更快。
假设列中有一个换行符Statuts,您可以通过制作两步/行 M 代码并使用函数Splitter.SplitTextByDelimiter来获得输出:
let
    Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
    #"Split Column by Delimiter" = Table.ExpandListColumn(Table.TransformColumns(Source, {{"Status", Splitter.SplitTextByDelimiter("#(lf)", QuoteStyle.Csv), let itemType = (type nullable text) meta [Serialized.Text = true] in type {itemType}}}), "Status")
in
    #"Split Column by Delimiter"
Run Code Online (Sandbox Code Playgroud)
对于约 1.4k 行,查询刷新所需时间不到 2~3 秒。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           745 次  |  
        
|   最近记录:  |