Excel精英培训网

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

[已解决]代码解释?

[复制链接]
发表于 2013-5-26 22:03 | 显示全部楼层 |阅读模式
本帖最后由 hahada 于 2013-5-29 12:13 编辑

Sub Macro1()
    Dim arr, i&, j&, lr&, s$
    s = "w7230021"
    With Range("B17:B" & Range("a65536").End(xlUp).Row)
        arr = .Value
        lr = UBound(arr)
        For i = 1 To lr Step 3
            m = m + 1
            n = 0
            For j = i To i + 2
                If j > lr Then Exit For
                n = n + 1
                arr(j, 1) = s & m & n
            Next
        Next
        .Value = arr
    End With
End Sub
最佳答案
2013-5-26 22:23
本帖最后由 1032446692 于 2013-5-26 22:24 编辑

Sub Macro1()
    Dim arr, i&, j&, lr&, s$  '定义变量
    s = "w7230021"  '给变量s赋值
    With Range("B17:B" & Range("a65536").End(xlUp).Row) ‘with与后面的end with是配套的,在这之间调用他后面的对象的属性可以直接用"."+属性/方法名。Range("a65536").End(xlUp).Row是指从a65536单元格向上查找第一个非空单元格的行
        arr = .Value  ‘把with后面的对象Range("B17:B" & Range("a65536").End(xlUp).Row)的Value属性值复制给arr
        lr = UBound(arr) ’把数组arr第一维的最大下标复制给变量ir
        For i = 1 To lr Step 3 ‘for..next之间是从1到ir以三个一间隔的循环
            m = m + 1 ’把变量m加1后复制给变量m
            n = 0   '给变量赋值
            For j = i To i + 2 ‘内部循环,从当前的i这个数开始,到i+2结束
                If j > lr Then Exit For ’如果 j > lr 推出该循环
                n = n + 1 ‘同上赋值
                arr(j, 1) = s & m & n ’把s,m,n连接起来复制给数组的元素arr(j,1)
            Next
        Next
        .Value = arr  '把arrf赋值给with后的对象的alue属性
    End With
End Sub
发表于 2013-5-26 22:17 | 显示全部楼层
Sub Macro1()
    Dim arr, i&, j&, lr&, s$  ‘声明变量
    s = "w7230021"  ’给变量s赋值
    With Range("B17:B" & Range("a65536").End(xlUp).Row) 'with语句 B列的数据区域
        arr = .Value ‘把B列区域装进arr,构成数组
        lr = UBound(arr) ‘计算有多少个(数组的下标)
        For i = 1 To lr Step 3  ‘循环,每隔3个数
            m = m + 1 ’m设置为计数器,统计循环次数
            n = 0 ‘初始化n的值为0
            For j = i To i + 2 ‘设置循环,根据i的值
                If j > lr Then Exit For ‘如果j的值大于变量lr的值,则退出循环
                n = n + 1 ‘n设置为计数器,统计循环次数
                arr(j, 1) = s & m & n ‘把s 连接m再连接n后的字符串装进数组
        Next
        .Value = arr ‘把处理后的数组输入到单元格中
    End With
End Sub
回复

使用道具 举报

 楼主| 发表于 2013-5-26 22:20 | 显示全部楼层
小福贵 发表于 2013-5-26 22:17
Sub Macro1()
    Dim arr, i&, j&, lr&, s$  ‘声明变量
    s = "w7230021"  ’给变量s赋值

主要是For j = i To i + 2,根据附件怎么想不明白?
回复

使用道具 举报

发表于 2013-5-26 22:23 | 显示全部楼层    本楼为最佳答案   
本帖最后由 1032446692 于 2013-5-26 22:24 编辑

Sub Macro1()
    Dim arr, i&, j&, lr&, s$  '定义变量
    s = "w7230021"  '给变量s赋值
    With Range("B17:B" & Range("a65536").End(xlUp).Row) ‘with与后面的end with是配套的,在这之间调用他后面的对象的属性可以直接用"."+属性/方法名。Range("a65536").End(xlUp).Row是指从a65536单元格向上查找第一个非空单元格的行
        arr = .Value  ‘把with后面的对象Range("B17:B" & Range("a65536").End(xlUp).Row)的Value属性值复制给arr
        lr = UBound(arr) ’把数组arr第一维的最大下标复制给变量ir
        For i = 1 To lr Step 3 ‘for..next之间是从1到ir以三个一间隔的循环
            m = m + 1 ’把变量m加1后复制给变量m
            n = 0   '给变量赋值
            For j = i To i + 2 ‘内部循环,从当前的i这个数开始,到i+2结束
                If j > lr Then Exit For ’如果 j > lr 推出该循环
                n = n + 1 ‘同上赋值
                arr(j, 1) = s & m & n ’把s,m,n连接起来复制给数组的元素arr(j,1)
            Next
        Next
        .Value = arr  '把arrf赋值给with后的对象的alue属性
    End With
End Sub
回复

使用道具 举报

发表于 2013-5-26 22:23 | 显示全部楼层
i=3
for j=3 to 3+2
回复

使用道具 举报

发表于 2013-5-26 22:42 | 显示全部楼层
hahada 发表于 2013-5-26 22:20
主要是For j = i To i + 2,根据附件怎么想不明白?

这句的意思就是让内循环只能循环3次,好像就是个位满3了,就进上1。例如:11,12,13;21,22,23……
回复

使用道具 举报

发表于 2013-5-27 20:46 | 显示全部楼层
For j = i To i + 2 ‘设置循环,根据i的值
假如 i=5,j的范围就是5 to 7
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-1 18:35 , Processed in 0.114300 second(s), 5 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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