Excel精英培训网

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

[已解决]特急在线等!各位帮忙看看为什么会出现下标越界

[复制链接]
发表于 2010-12-8 08:51 | 显示全部楼层 |阅读模式
我用的是2010版
它是总表和分表回避及提取的
分表数据显示含有6万7千行,红色字段代码
就显示 下标越界,请问该如何解决啊?
Sub Test()
    Dim rgeBase As Range, rge As Range
    Dim vtBase, vt, vtTmp, i#, j#, k#
    
    Set rgeBase = Range("A1").CurrentRegion
    Set rge = Range("E1").CurrentRegion
    vtBase = rgeBase
    vt = rge
    
    'filter the data
    For i = 3 To UBound(vt)
        For j = 3 To UBound(vtBase)
            If vt(i, 1) = vtBase(j, 1) Then
                If StrComp(vt(j, 2), vtBase(i, 2)) = 0 Then vt(i, 2) = Empty    这段代码
                If StrComp(vt(i, 3), vtBase(j, 3)) = 0 Then vt(i, 3) = Empty
                Exit For
            End If
        Next
    Next
    
    'get the data thar after filter
    ReDim vtTmp(1 To UBound(vt), 1 To 3)
    k = 0
    For i = 1 To UBound(vt)
        If i = 1 Or Len(vt(i, 2)) > 0 Or Len(vt(i, 3)) > 0 Then
            k = k + 1
            For j = 1 To 3
                vtTmp(k, j) = vt(i, j)
            Next
        End If
    Next
    Range("M1").Resize(k, 3) = vtTmp
End Sub

可以不按照此代码,但要做到对比出新增内容
UeUb2TTa.rar (4.73 KB, 下载次数: 24)
[此贴子已经被作者于2010-12-8 16:17:02编辑过]
最佳答案
2010-12-8 13:39

分表和总表的用户号不重复吧!

 


Sub Test()
    Dim d As Object
    Dim ArrF() As Variant    '分表
    Dim ArrZ() As Variant    '总表
    Dim ArrJG(1 To 100000, 1 To 3)    '结果
    Dim i&, j&, k&

    Set d = CreateObject("scripting.dictionary")
    ArrF = Range("A2:C" & Range("A2").End(xlDown).Row).Value
    ArrZ = Range("E2:G" & Range("E2").End(xlDown).Row).Value
    For i = 1 To UBound(ArrF)
        d(ArrF(i, 1)) = i
    Next i

    For i = 1 To UBound(ArrZ)
        If Asc(ArrZ(i, 1)) > 0 Then
            If d.exists(ArrZ(i, 1)) Then
                j = d(ArrZ(i, 1))
                If ArrF(j, 2) <> ArrZ(i, 2) Or ArrF(j, 3) <> ArrZ(i, 3) Then
                    k = k + 1
                    ArrJG(k, 1) = "'" & ArrZ(i, 1)
                    If ArrF(j, 2) = ArrZ(i, 2) Then
                        ArrJG(k, 2) = Empty
                    Else
                        ArrJG(k, 2) = ArrZ(i, 2)
                    End If
                    If ArrF(j, 3) = ArrZ(i, 3) Then
                        ArrJG(k, 3) = Empty
                    Else
                        ArrJG(k, 3) = ArrZ(i, 3)
                    End If
                End If
            Else
                k = k + 1
                ArrJG(k, 1) = "'" & ArrZ(i, 1)
                ArrJG(k, 2) = ArrZ(i, 2)
                ArrJG(k, 3) = ArrZ(i, 3)
            End If
        End If
    Next i

    Range("I:K").Clear
    Range("I2") = "用户号"
    Range("J2") = "规格1"
    Range("K2") = "规格2"
    Range("I3").Resize(k, 3) = ArrJG
End Sub
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-12-8 08:59 | 显示全部楼层

最好是上附件,大家结合你的数据看的话   相对容易一些。

回复

使用道具 举报

 楼主| 发表于 2010-12-8 09:02 | 显示全部楼层
回复

使用道具 举报

发表于 2010-12-8 09:09 | 显示全部楼层

执行到第5句:For i = 3 To UBound(vt),提示“类型不匹配”了?

楼主最好上传附件(如果担心数据安全,就替换下)

 

[em09]
回复

使用道具 举报

 楼主| 发表于 2010-12-8 09:13 | 显示全部楼层

已传附件,请帮忙!
回复

使用道具 举报

发表于 2010-12-8 09:23 | 显示全部楼层

你的代码套到你的附件里,运行正常
回复

使用道具 举报

 楼主| 发表于 2010-12-8 09:29 | 显示全部楼层

我知道是运行正常啊,但是当分表的数据超过1万行以上,代码就会出错,所以请各位大大帮助
回复

使用道具 举报

发表于 2010-12-8 09:32 | 显示全部楼层

把你那个1万行出错的附件传上来吧。
回复

使用道具 举报

 楼主| 发表于 2010-12-8 09:40 | 显示全部楼层

vu4aRGTI.rar (466.44 KB, 下载次数: 0)
回复

使用道具 举报

发表于 2010-12-8 09:52 | 显示全部楼层

rge = Range("E1").CurrentRegion
在E1按CTRL+↓得到的行号是2851
当j>2851时vt(j,2)就会出错. 

j还是i?

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-28 20:31 , Processed in 0.425588 second(s), 12 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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