Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
楼主: 爱疯

[已解决]单元格赋值提速

[复制链接]
发表于 2010-8-25 12:52 | 显示全部楼层

QUOTE:
以下是引用爱疯在2010-8-25 11:52:00的发言:

请问

For Each x In Selection

For Each Rng In Selection.AreaS

的区别是什么呀?

[em09]

For Each x In Selection 访问每个单元格

For Each Rng In Selection.AreaS  访问每个分区,比如同时选中A1:D1和F2:G6,这个Rng就分别代表A1:D1和F2:G6

回复

使用道具 举报

 楼主| 发表于 2010-8-25 21:01 | 显示全部楼层

仔细看完DJ和阿木方法了,都可多选区。如果在A1:D20000的范围中:

  • DJ是读4*20000次,写1次。
  • 阿木是读20000次,写1次。

没想到还能在数组身上打主意,吃了75%的回扣哇!虽然方法一下不能熟练,但是从此有了这个念头,学习[em03]

没出现惊天动地一句代码,但觉得有收获[em01]

 

 

[em27][em27][em27]
回复

使用道具 举报

发表于 2010-8-25 21:24 | 显示全部楼层

Sub dd()
 Dim t
 Dim Arr
 t = Timer
 Selection = ""
 rc = Selection.Rows.Count
 cc = Selection.Columns.Count
 r = Selection.Row
 c = Selection.Column
 ReDim arr1(1 To r + rc - 1, 1 To c + cc - 1)
 For x = 1 To UBound(arr1)
   For y = 1 To UBound(arr1, 2)
      arr1(x, y) = Chr(64 + y) & x + r - 1
   Next y
 Next x
 Selection = arr1
 MsgBox Timer - t
End Sub
回复

使用道具 举报

 楼主| 发表于 2010-8-25 21:46 | 显示全部楼层

谢谢兰版!

先是发现比阿木快,接着又发现原来有偷懒(针对已指定的区域)的嫌疑[em04]。不过,这也正是越通用越耗时。

先清除selection的数据,的确又加速些了,学习![em27][em27]

回复

使用道具 举报

发表于 2010-8-26 00:03 | 显示全部楼层

兰版23楼代码很有问题

1.选取区域越过Z列结果就有问题

2.不从A列开始选取区域,结果也有问题

回复

使用道具 举报

发表于 2010-8-26 07:04 | 显示全部楼层

学习一下!!
回复

使用道具 举报

发表于 2010-8-26 07:32 | 显示全部楼层

[em04][em04][em04]
[此贴子已经被作者于2010-8-26 7:32:44编辑过]
回复

使用道具 举报

发表于 2010-8-26 07:33 | 显示全部楼层

23L兰版的代码还没有考虑多选区域的情况,另外22L爱疯说我的读次数和阿木不同其实是错误的,只是给每个区域赋值的方法不同,读取的次数是一样的.阿木的方法更捷径.
回复

使用道具 举报

发表于 2010-8-26 08:27 | 显示全部楼层

爱疯这个问题其实是一道很好的题目
回复

使用道具 举报

 楼主| 发表于 2010-8-26 08:34 | 显示全部楼层

通过学习大家的方法,觉得阿木的方法还能优化。 


上图是DJ,下图是阿木。22楼的读取次数没具体描述,可能产生误解,如图应该没错吧?

还是比如测试范围是a1:d20000。只要读取了:

  • Rng.item(1,1)   '区域中第1个单元格
  • Rng.Rows.Count   '区域所用行
  • Rng.Columns.Count   '区域所用列

剩下的数组元素的值,就都可以从前1个数组元素计算出来了。形如下图:


 

        Dim x As Range
        ArrTemp(1, 1) = Rng.Item(1, 1).Address
        For Each x In Rng
            s = s + 1
            If s = RowN * ColN Then
                ArrTemp(i, j) = MyAdd()
            End If
        Next x

好像这样,myadd的方法需要另改。不知道这样想,对不对?

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-6 20:45 , Processed in 0.736856 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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