Excel精英培训网

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

[已解决]请问这一句代码的二维为什么要减1?

[复制链接]
发表于 2012-9-9 15:26 | 显示全部楼层 |阅读模式
Sub Macro1() '为了加快速度,没有采用删除行的办法,只是覆盖原来的数据
    Dim arr, d As Object, i&, j&, m&
    Set d = CreateObject("scripting.dictionary")
    arr = Sheets("Sheet1").Range("A1").CurrentRegion
    For i = 1 To UBound(arr)
        d(arr(i, 1)) = ""
    Next
    arr = Range("A1").CurrentRegion
       For i = 1 To UBound(arr)
        If d.exists(arr(i, 1)) Then
            m = m + 1
            For j = 1 To UBound(arr, 2)
                arr(m, j) = arr(i, j)
            Next
        End If
    Next
    Range("A1").CurrentRegion.Clear
   
    Range("A1").Resize(m, j-1) = arr'请问,为何这里是J-1,而不是J,百思不得其解?
End Sub
有附件,谢谢
最佳答案
2012-9-9 15:56
因为j是循环变量,循环结束后,j的值刚好比循环次数多了1次。所以为表达循环次数就需表示成j-1

这里,Resize(m, j-1)和Resize(ubound(arr),ubound(arr,2))等效。
前者,看着简单。
后者,好理解。

字典数组删除不匹配数据.zip

10.76 KB, 下载次数: 4

发表于 2012-9-9 15:51 | 显示全部楼层
本帖最后由 hwc2ycy 于 2012-9-9 15:56 编辑

俺查了帮助,看了以前写的代码,这个RESIZE的行,列是新区域的行列数的
回复

使用道具 举报

发表于 2012-9-9 15:56 | 显示全部楼层    本楼为最佳答案   
因为j是循环变量,循环结束后,j的值刚好比循环次数多了1次。所以为表达循环次数就需表示成j-1

这里,Resize(m, j-1)和Resize(ubound(arr),ubound(arr,2))等效。
前者,看着简单。
后者,好理解。

评分

参与人数 1 +1 收起 理由
秋意正浓 + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2012-9-9 15:57 | 显示全部楼层
爱疯 发表于 2012-9-9 15:56
因为j是循环变量,循环结束后,j的值刚好比循环次数多了1次。所以为表达循环次数就需表示成j-1

这里,Re ...

对极了,
都忘了循环了,
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 13:14 , Processed in 0.675855 second(s), 17 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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