ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 山菊花

[Excel 程序开发] [开_101] 词语整理

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-9 10:05 | 显示全部楼层
这一题我感觉用collection会更快,只是感觉,一会试验一下:) 另:声明变量的语句不能算行数吧?
[此贴子已经被作者于2006-6-9 10:08:17编辑过]

TA的精华主题

TA的得分主题

发表于 2006-6-9 11:37 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

献丑了:)

Dim p&, i&, j&, c&, element, arr, arr1()
Dim h As New Collection
p = [a65536].End(xlUp).Row
arr = Range(Cells(1, 1), Cells(p, 1))
On Error Resume Next
For i = 1 To p
temp = Split(arr(i, 1), ",")
For j = 0 To UBound(temp)
  h.Add temp(j), temp(j)
Next j
Next i
c = h.Count
ReDim arr1(1 To c, 0)
i = 1
For Each element In h
arr1(i, 0) = element
i = i + 1
Next
Range("b1:b" & c) = arr1

代码19行,运行时间在0.6-0.7秒之间

QUOTE:

谦虚。

我的电脑算蜗牛级了。测试结果,UNARTHUR编写的代码速度最快,2.34375秒。

[此贴子已经被山菊花于2006-6-29 19:59:51编辑过]

TA的精华主题

TA的得分主题

发表于 2006-6-9 12:48 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-6-12 00:58 | 显示全部楼层

学习了UNARTHUR兄集合的用法,做的 用时1秒

用集合筛选不重复值,真是太快了!!!

Private Sub CommandButton1_Click()
t = Timer
Dim col As New Collection
On Error Resume Next
arr = Range("a1:a65536") '目标列转到数组,跑得快
ar = Range("z1:z65536") '随便找个空列,建个数组
For a = 1 To [a65536].End(xlUp).Row
aa = arr(a, 1)
Do While InStr(aa, ",") <> 0 '找"," 找到就分
x = InStr(aa, ",")
col.Add Mid(aa, 1, x - 1), Mid(aa, 1, x - 1) '","之前的加入到集合
aa = Mid(aa, x + 1, Len(aa) - x) '","之后的
Loop
col.Add aa, aa '没有","的加入到集合
Next a
For Each xxx In col '集合转到数组
ar(i + 1, 1) = xxx
i = i + 1
Next
Range("b1:b" & col.Count) = ar
Range("g1") = Timer - t
End Sub

附:不等号的发帖方法 <> & l t ; = < & g t ; = >
[此贴子已经被作者于2006-6-12 1:13:53编辑过]

TA的精华主题

TA的得分主题

发表于 2006-6-12 22:08 | 显示全部楼层
OK!知道上回错在什么地方了。

TA的精华主题

TA的得分主题

发表于 2006-6-22 23:20 | 显示全部楼层

'另类方法(使用无表记录集) 添加引用ADO(Microsoft ActiveX Data Objects 2.X Library)

运行时间:2.705625
测试时间:57.046875

Private Sub CommandButton1_Click()
t = Timer
Dim rst As New ADODB.Recordset, arr, i As Long
rst.Fields.Append "word", adVarChar, 30
rst.Open
arr = Range("a1:a" & Range("a65536").End(xlUp).Row)
arr = Split(Join(WorksheetFunction.Transpose(arr), ","), ",")
For i = 0 To UBound(arr)
rst.Find "word='" & arr(i) & "'"
If rst.EOF Then rst.AddNew "word", arr(i)
Next
rst.MoveFirst
Range("b1").CopyFromRecordset rst
rst.Close
Range("g1") = Timer - t
End Sub

TA的精华主题

TA的得分主题

发表于 2006-6-22 23:22 | 显示全部楼层

用含主键的临时表可以省去

rst.Find "word='" & arr(i) & "'"
If rst.EOF Then rst.AddNew "word", arr(i)

的时间,应该会再快些

TA的精华主题

TA的得分主题

发表于 2006-6-30 09:52 | 显示全部楼层

谢山菊花的提醒,代码确实有问题,改成下面这样就行了,不过超慢:

Private Sub CommandButton1_Click()

Dim rst As New ADODB.Recordset, rst2 As New ADODB.Recordset, arr, i As Long
rst.Fields.Append "word", adVarChar, 30
rst.Open
arr = Range("a1:a" & Range("a65536").End(xlUp).Row)
arr = Split(Join(WorksheetFunction.Transpose(arr), ","), ",")
For i = 0 To UBound(arr)
x = rst.RecordCount
rst.Find "[word]='" & arr(i) & "'", , adSearchBackward '<----------add here
If rst.BOF Then rst.AddNew "word", arr(i)
Next
rst.MoveFirst
Range("b1").CopyFromRecordset rst
rst.Close

End Sub


TA的精华主题

TA的得分主题

发表于 2006-6-30 09:54 | 显示全部楼层

这样也行,也是超慢,不过就几行(我一般也是用集合或字典的方式,很快的):

Private Sub CommandButton1_Click()
t = Timer
Dim arr
arr = Split(Join(WorksheetFunction.Transpose(Range("a1:a" & Range("a65536").End(xlUp).Row)), ","), ",")
Range("b1").Resize(UBound(arr, 1) + 1, 1) = WorksheetFunction.Transpose(arr)
Range("b1:b" & Range("B65536").End(xlUp).Row).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=Range("c1"), Unique:=True
Columns(2).EntireColumn.Delete
Range("g1") = Timer - t
End Sub

TA的精华主题

TA的得分主题

发表于 2013-5-3 00:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
原以为是数组公式,VBA有点简单了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-20 02:12 , Processed in 0.048931 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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