| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 134 人关注过本帖
标题:请教各位关于Excel 的 Union
只看楼主 加入收藏
easyppt
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-24
收藏
 问题点数:0 回复次数:7 
请教各位关于Excel 的 Union
但是这样少量多次反复循环操作的话,合并3万次不到1秒。
Sub test2()
    tms = Timer
    For i = 1 To 1000
        Set rng = [a1]
        For j = 1 To 30
            r = Int(Rnd * 10000) + 1
            Set rng = Union(rng, Cells(r))
        Next
    Next
    MsgBox Format(Timer - tms, "0.000s ")
End Sub
复制代码

上面的代码来自 网上的,请问如何转换为VFP,且速度一样快。
搜索更多相关主题的帖子: For Union Set Excel Next 
3 天前 11:03
wengjl
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:102
帖 子:2069
专家分:3670
注 册:2007-4-27
收藏
得分:0 
set rng = [a1]

set rng = Union(rgn,cells(r))
这二句为何意???

只求每天有一丁点儿的进步就可以了
3 天前 13:16
easyppt
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-24
收藏
得分:0 
应该是无解,可能Excel的合并区域Union 就是轻量级应用,多了就是卡。

另外发现1楼代码本身也有问题,即:Set rng = [a1] 放在循环内,没有实际意义。

谢谢,这个话题可以不用研究了,关闭吧。
3 天前 16:21
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:326
帖 子:8408
专家分:36861
注 册:2014-5-20
收藏
得分:0 
以下是引用easyppt在2021-11-24 16:21:37的发言:

应该是无解,可能Excel的合并区域Union 就是轻量级应用,多了就是卡。

另外发现1楼代码本身也有问题,即:Set rng = [a1] 放在循环内,没有实际意义。

谢谢,这个话题可以不用研究了,关闭吧。

关键是要求“速度一样快”,这一定是无解了
随便写个速度肯定不一样快的示例
图片附件: 游客没有浏览图片的权限,请 登录注册

程序代码:
oExcel = CREATEOBJECT("Excel.Application")
oExcel.DisplayAlerts = 0
oExcel.WorkBooks.Add
tms = SECONDS()
RAND(-1)
n = 10
FOR i=1 TO n
    rng = oExcel.Range("A1")
    FOR j=1 TO 30
        r = INT(RAND()*n) + 1
        rng = oExcel.Union(rng, oExcel.Cells(r))
    ENDFOR 
ENDFOR
? SECONDS()-tms
rng.Interior.color = 0xFF
oExcel.Visible = 1

3 天前 18:34
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:326
帖 子:8408
专家分:36861
注 册:2014-5-20
收藏
得分:0 
EXCEL2003列数最大是256
n=1000时要70多秒
程序代码:
tms = SECONDS()
RAND(-1)
n = 1000
nCols = 256
FOR i=1 TO n
    rng = oExcel.Range("A1")
    FOR j=1 TO 30
        r = INT(RAND()*nCols) + 1
        rng = oExcel.Union(rng, oExcel.Cells(r))
    ENDFOR 
ENDFOR
? SECONDS()-tms

3 天前 18:59
吹水佬
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:326
帖 子:8408
专家分:36861
注 册:2014-5-20
收藏
得分:0 
FOR i=1 TO 1000
    rng = oExcel.Range("A1")
ENDFOR
这个循环的是什么意思
3 天前 19:25
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:35
帖 子:709
专家分:2361
注 册:2011-5-8
收藏
得分:0 
这个好像只是测试机器性能的一个函数。
Union()作用微软帮助文件有说明
Set rng = [a1]
放在循环中是有意义的,保证每次进入内循环前rng指向A1。因为内循环结束后,rng的指向不定。

dBase有人接盘了。
3 天前 20:45
easyppt
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2021-11-24
收藏
得分:0 
谢谢各位老师!
3 天前 22:41
快速回复:请教各位关于Excel 的 Union
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.059941 second(s), 9 queries.
Copyright©2004-2021, BCCN.NET, All Rights Reserved