我有一个电子表格,其中的数据位于用换行符分隔的单个单元格中。我需要将单元格分成单独的行,以便我可以删除一些数据并重新组合。像这样:
| 物品 | 地位 |
|---|---|
| 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 次 |
| 最近记录: |