Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 863|回复: 5

[已解决]宏代码:散状分布的数据如何归集成一列

[复制链接]
发表于 2022-5-20 10:05 | 显示全部楼层 |阅读模式
本帖最后由 lijian8003 于 2022-5-20 10:37 编辑

例如:单元格内有多个数据,且存在重复项,散布于a1:c13区域,欲用宏代码将其归集到F列(不删重复数据)。

实际运用时数据庞大,非常注重宏代码的运行速度。


感谢 鄂龙蒙 老师鼎力相助
最佳答案
2022-5-20 10:33


執行0.015秒如圖片,請測試看看,謝謝

Sub test()
Dim Arr, Brr(1 To 10000, 1 To 1), a, R&, n&, i&, j&
Tm = Timer
R = Columns("A:C").Find("*", , , , , 2).Row
Arr = Range("a1:c" & R)
For j = 1 To UBound(Arr, 2): For i = 1 To UBound(Arr)
    a = Split(Arr(i, j), " ")
    For k = 0 To UBound(a)
        n = n + 1: Brr(n, 1) = a(k)
    Next
Next i: Next j
Range("e1").Resize(n, 1).NumberFormatLocal = "@"
Range("e1").Resize(n, 1) = Brr
MsgBox Timer - Tm
End Sub

宏代码:散状分布的数据归集成一列(已解决).rar

18.89 KB, 下载次数: 3

发表于 2022-5-20 10:33 | 显示全部楼层    本楼为最佳答案   


執行0.015秒如圖片,請測試看看,謝謝

Sub test()
Dim Arr, Brr(1 To 10000, 1 To 1), a, R&, n&, i&, j&
Tm = Timer
R = Columns("A:C").Find("*", , , , , 2).Row
Arr = Range("a1:c" & R)
For j = 1 To UBound(Arr, 2): For i = 1 To UBound(Arr)
    a = Split(Arr(i, j), " ")
    For k = 0 To UBound(a)
        n = n + 1: Brr(n, 1) = a(k)
    Next
Next i: Next j
Range("e1").Resize(n, 1).NumberFormatLocal = "@"
Range("e1").Resize(n, 1) = Brr
MsgBox Timer - Tm
End Sub

1.JPG
回复

使用道具 举报

 楼主| 发表于 2022-5-20 10:40 | 显示全部楼层
sam-wang 发表于 2022-5-20 10:33
執行0.015秒如圖片,請測試看看,謝謝

Sub test()

感谢,太棒了!
回复

使用道具 举报

 楼主| 发表于 2022-5-20 17:05 | 显示全部楼层
本帖最后由 lijian8003 于 2022-5-20 17:10 编辑
sam-wang 发表于 2022-5-20 10:33
執行0.015秒如圖片,請測試看看,謝謝

Sub test()

老师,您好!宏代码循序3次,分别写入E F G列,
出现E列数据并入F列、F列数据并入G列现象,
如何才能实现前次循环结果不并入后次循环?

欲前次循环结果不并入后次循环结果.png

宏代码:循环运行,欲实现前次结果不并入后次.rar

18.7 KB, 下载次数: 2

回复

使用道具 举报

发表于 2022-5-21 06:55 | 显示全部楼层
lijian8003 发表于 2022-5-20 17:05
老师,您好!宏代码循序3次,分别写入E F G列,
出现E列数据并入F列、F列数据并入G列现象,
如何才能实 ...



Sub test()
Dim Arr, Brr(1 To 10000, 1 To 1), a, R&, n&, i&, j&, C%
Tm = Timer
R = Columns("A:C").Find("*", , , , , 2).Row
Arr = Range("a1:c" & R)
For j = 1 To UBound(Arr, 2): For i = 1 To UBound(Arr)
    a = Split(Arr(i, j), " ")
    For k = 0 To UBound(a)
        n = n + 1: Brr(n, 1) = a(k)
    Next
Next i: Next j
R = 1
For C = 1 To 3
    Cells(R, C + 4).Resize(n, 1).NumberFormatLocal = "@"
    Cells(R, C + 4).Resize(n, 1) = Brr
    R = R + n
Next
MsgBox Timer - Tm
End Sub

1.JPG
回复

使用道具 举报

 楼主| 发表于 2022-5-21 11:56 | 显示全部楼层
sam-wang 发表于 2022-5-21 06:55
Sub test()
Dim Arr, Brr(1 To 10000, 1 To 1), a, R&, n&, i&, j&, C%
Tm = Timer

感谢
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-26 04:09 , Processed in 5.331443 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表