在换行符处拆分单个单元格

Myy*_*kro 6 excel vba

我有一个电子表格,其中的数据位于用换行符分隔的单个单元格中。我需要将单元格分成单独的行,以便我可以删除一些数据并重新组合。像这样:

物品 地位
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分钟。有没有一种方法可以简化它,使其运行得更快一点?

Jvd*_*vdV 7

我强烈推荐 PowerQuery 来完成手头的任务:

  • 想象一下以下示例数据;

    在此输入图像描述

  • 选择数据,然后按照下面的GIF将其加载到PQ中;

    在此输入图像描述

  • PQ将打开,请按照以下GIF步骤操作;

    在此输入图像描述

  • 关闭 PQ 并保存更改。结果将如下所示:

    在此输入图像描述


Tim*_*ess 5

对于这种特定的数据转换,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 秒。

演示:

在此输入图像描述

  • 是的,您需要将此行添加到您的 VBA 代码中:`ActiveWorkbook.Connections("Query - Table1").Refresh`。如果需要,我的答案中添加了一个演示,以解释如何使用 Power Query 创建查询。 (2认同)
  • @Myykro,干得好!很高兴听到您学到了新的东西**并且**能够实现这一点以节省您大量的时间/精力。还有 L'Artiste 的精彩解释!+ (2认同)
  • 对你有好处@Mykkro,感谢 JvdV 的客气话,我真的很感激。 (2认同)