Excel精英培训网

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

[已解决]能不能修改下代码?

[复制链接]
发表于 2013-2-18 15:43 | 显示全部楼层
dadasdas 发表于 2013-2-18 15:37
i + 3是什么意思?

i的第一次值是2,而第一个待判断单元格是H5(行号是5),

所以,必须+3才是H5的行号。
回复

使用道具 举报

 楼主| 发表于 2013-2-18 15:55 | 显示全部楼层
爱疯 发表于 2013-2-18 15:43
i的第一次值是2,而第一个待判断单元格是H5(行号是5),

所以,必须+3才是H5的行号。

A = .Range("A4").CurrentRegion
For i = 2 To UBound(A)
数组A的A4当前区域是哪,i变量从2开始到数组最大下标是在哪个区域,
麻烦再解释下
回复

使用道具 举报

发表于 2013-2-18 16:14 | 显示全部楼层
本帖最后由 爱疯 于 2013-2-18 20:25 编辑
dadasdas 发表于 2013-2-18 15:55
A = .Range("A4").CurrentRegion
For i = 2 To UBound(A)
数组A的A4当前区域是哪,i变量从2开始到数组最 ...


        MsgBox .Range("A4").CurrentRegion.Address(0, 0)    '返回A4:AF33
        A = .Range("A4").CurrentRegion
        'i=1对应源表中第4行(上面赋值语句中,不是指定了A4的当前区域么)
        '而源表第4行,就是有很多编号编号的,是不需判断的内容
        '所以,真正需判断的数据是从第4行的下一行(i=1的下一个值,当然是i=2)开始的
        For i = 2 To UBound(A)
回复

使用道具 举报

 楼主| 发表于 2013-2-18 16:40 | 显示全部楼层
本帖最后由 dadasdas 于 2013-2-18 16:43 编辑
爱疯 发表于 2013-2-18 16:14
MsgBox .Range("A4").CurrentRegion.Address(0, 0)    '返回A1:E8
        A = .Range("A4").Cu ...


在H3单元格填了一个数据,执行宏以后行位置变了,怎么回事?
回复

使用道具 举报

 楼主| 发表于 2013-2-18 16:47 | 显示全部楼层
本帖最后由 dadasdas 于 2013-2-18 16:49 编辑
爱疯 发表于 2013-2-18 16:14
MsgBox .Range("A4").CurrentRegion.Address(0, 0)    '返回A1:E8
        A = .Range("A4").Cu ...


意思是如果H4上面还有数据,而且数据位置不固定,执行起来会不会有问题
回复

使用道具 举报

发表于 2013-2-18 16:51 | 显示全部楼层
dadasdas 发表于 2013-2-18 16:40
在H3单元格填了一个数据,执行宏以后行位置变了,怎么回事?

现在附件变成怎样了,上传看看吧
回复

使用道具 举报

 楼主| 发表于 2013-2-18 20:21 | 显示全部楼层
爱疯 发表于 2013-2-18 16:51
现在附件变成怎样了,上传看看吧


For i = 2 To UBound(A)
最后问一个,这个数组A的最大下标是什么,从2开始到哪?

回复

使用道具 举报

发表于 2013-2-18 20:27 | 显示全部楼层
从2开始到30。

30是因为Range("A4").CurrentRegion,其实就是A4:AF33
而A4:AF33包含了30行数据
回复

使用道具 举报

 楼主| 发表于 2013-2-18 20:38 | 显示全部楼层
本帖最后由 dadasdas 于 2013-2-19 12:41 编辑
爱疯 发表于 2013-2-18 20:27
从2开始到30。

30是因为Range("A4").CurrentRegion,其实就是A4:AF33


看下面这个UBound(a),是不是指列标号
Sub Macro1()
    Dim wb As Workbook, sh As Worksheet, c As Range, r As Range, rng As Range, lr As Long
    Dim a, b, d As Object, i&, arr, brr()
    Set d = CreateObject("scripting.dictionary")
    a = Array("项目", "编号")
    b = Array("序列", "序号")
    For i = 0 To UBound(a)
        d(a(i)) = b(i)
    Next
   

点评

不是  发表于 2013-2-18 20:40
回复

使用道具 举报

 楼主| 发表于 2013-2-18 20:50 | 显示全部楼层
爱疯 发表于 2013-2-18 20:27
从2开始到30。

30是因为Range("A4").CurrentRegion,其实就是A4:AF33

UBound都是以行的方向,从上往下循环,是不是?
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 09:48 , Processed in 0.291706 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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