Excel精英培训网

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

[已解决]下标越界问题

[复制链接]
发表于 2013-8-21 21:12 | 显示全部楼层 |阅读模式
本帖最后由 木牙水 于 2013-8-22 15:49 编辑

我想判断 I列 有数据的单元格是否为日期格式,写了一段代码,但是总提示下标越界,请帮忙找出下原因?
Sub 检查数据()
    Dim arr
    Dim j
    Dim rn
    j = Sheets("汇总表").Range("b65536").End(3).Row
    arr = Sheets("汇总表").Range("i5:i" & j).Value
    For k = 1 To UBound(arr)
        If IsDate(arr(k)) = False And rn = "" Then
              rn = Range("i" & k + 4).Address
        ElseIf IsDate(arr(k)) = False Then
              rn = rn & "、" & Range("i" & k + 4)
        End If
    Next k
    If rn = "" Then
    MsgBox "数据无误"
    Else
    MsgBox rn
    End If
End Sub
问题.rar (34.43 KB, 下载次数: 4)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-8-21 21:22 | 显示全部楼层
本帖最后由 我心飞翔410 于 2013-8-21 21:25 编辑

Sub 检查数据()
    Dim arr
    Dim j
    Dim rn
    j = Sheets("汇总表").Range("b65536").End(3).Row
    arr = Sheets("汇总表").Range("i5:i" & j).Value
    For k = 1 To UBound(arr)
        If Not IsDate(arr(k, 1)) And rn = "" Then
              rn = Range("i" & k + 4).Address
        ElseIf IsDate(arr(k, 1)) = False Then
              rn = rn & "、" & Range("i" & k + 4)
        End If
    Next k
    If rn = "" Then
    MsgBox "数据无误"
    Else
    MsgBox rn
    End If
End Sub
那是arr是二维数组 不是一维数组

评分

参与人数 1 +3 收起 理由
木牙水 + 3 谢谢啦!

查看全部评分

回复

使用道具 举报

发表于 2013-8-21 21:25 | 显示全部楼层    本楼为最佳答案   
1、j = Sheets("汇总表").Range("b65536").End(3).Row
    arr = Sheets("汇总表").Range("i5:i" & j).Value
由于B列无数据,所以j=1,第二行arr得到的就是Sheets("汇总表").Range("i1:i5")的值

2、下标越界是因为:arr = Sheets("汇总表").Range("i5:i" & j).Value后arr是个二维数组,而后面引用时是arr(k),这是一维的方式,当然就出错了。把arr(k)改成arr(k,1)就成了


3、循环中的判断还可优化一下

评分

参与人数 1 +3 收起 理由
木牙水 + 3 赞一个! 很详细

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2013-8-22 19:02 | 显示全部楼层
djyjysxxs 发表于 2013-8-21 21:25
1、j = Sheets("汇总表").Range("b65536").End(3).Row
    arr = Sheets("汇总表").Range("i5:i" & j).Val ...

请问 djyjysxxs  代码还能如何简化啊?
回复

使用道具 举报

发表于 2013-8-22 21:26 | 显示全部楼层
木牙水 发表于 2013-8-22 19:02
请问 djyjysxxs  代码还能如何简化啊?

你是想得到地址还是内容?
以下是得到地址,在数据量大时速度略快点点
Sub 检查数据()
    Dim arr()
    Dim j&
    Dim rn$
    j = Sheets("汇总表").Range("i65536").End(3).Row
    arr = Sheets("汇总表").Range("i5:i" & j).Value
    For j = 1 To UBound(arr)
        If IsDate(arr(j, 1)) = False Then
           rn = rn & "、$i$" & j + 4
        End If
    Next
    If rn = "" Then
    MsgBox "数据无误"
    Else
    MsgBox Mid(rn, 2)
    End If
   
End Sub
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-24 21:35 , Processed in 0.356901 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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