Excel精英培训网

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

[已解决]VBA数组成绩均大于等于80分为什么缺少一行了

[复制链接]
发表于 2017-3-29 13:55 | 显示全部楼层 |阅读模式
本帖最后由 laoau138 于 2017-3-29 16:51 编辑



VBA数组成绩均大于等于80分为什么缺少一行了


Sub test()
    Dim ar, ar1(), i%, m%, k, st1, st2         'VBA数组成绩均大于等于80分为什么缺少一行了
    ar = [b4].CurrentRegion
    ReDim ar1(UBound(ar), 7)
    st1 = [b23].Value: st2 = [c23].Value
        For i = 2 To UBound(ar)
            If ar(i, 3) >= st1 And ar(i, 4) >= st2 Then
             k = k + 1
                For m = 0 To 7
                    ar1(k, m) = ar(i, m + 1)
                Next m

            End If
        Next i

    [b26].Resize(k, 8) = ar1
End Sub

最佳答案
2017-3-29 14:04
后面的7应该是对的,如果前面的UBound(ar)是正确的话,
就是K的初值错了,你的K是从1开始累加的,实际数组是从0开始累加的,所以最上面会空一行。
把K=K+1放到for~next循环体下面去。

VBA数组成绩均大于等于80分为什么缺少一行了.rar

19.65 KB, 下载次数: 1

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2017-3-29 14:00 | 显示全部楼层
是不是这句错了:
ReDim ar1(UBound(ar), 7)
改为
ReDim ar1(1 to UBound(ar), 1 to 7)
没附件,仅推测,我也偶尔会犯这种错误。

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

发表于 2017-3-29 14:04 | 显示全部楼层    本楼为最佳答案   
后面的7应该是对的,如果前面的UBound(ar)是正确的话,
就是K的初值错了,你的K是从1开始累加的,实际数组是从0开始累加的,所以最上面会空一行。
把K=K+1放到for~next循环体下面去。

评分

参与人数 1 +9 收起 理由
laoau138 + 9 来学习

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2017-3-29 16:50 | 显示全部楼层
大灰狼1976 发表于 2017-3-29 14:00
是不是这句错了:
ReDim ar1(UBound(ar), 7)
改为

高手就是高手,看代码就能发现错误

点评

三脚猫水平,见笑了  发表于 2017-3-29 16:51
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-19 14:52 , Processed in 0.282905 second(s), 16 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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