Excel精英培训网

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

[已解决]下标越界的问题

[复制链接]
发表于 2014-11-21 12:30 | 显示全部楼层 |阅读模式
说明在附件中。谢谢各位老师。
最佳答案
2014-11-21 12:58
Sub 查找断号()

Dim arr1, arr2, i As Integer, Rng As Range, onlys As New Collection, x As Integer, y As Integer 'str
   
   
    r = [a65536].End(3).Row
    y = Cells(r, 1) - [a1] + 1
   
   
   
   [a1].Resize(r, 1).RemoveDuplicates Columns:=1, Header:=xlNo
   arr1 = [a1].Resize(r, 1).Value
   
  
   ReDim arr2(1 To y)
   
    For x = 1 To y
    arr2(x) = Format(x + [a1] - 1, "000000000")
   
    Next x

For i = 1 To UBound(arr1)
   

    arr2 = Filter(arr2, arr1(i, 1), False, 1)

Next i
For i = 0 To UBound(arr2)
    Cells(i + 2, 3) = arr2(i)
Next i
End Sub


求助.zip

16.79 KB, 下载次数: 8

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-11-21 12:34 | 显示全部楼层
这个根本不需要用到VBA,很简单的几步操作就可以做到~
回复

使用道具 举报

 楼主| 发表于 2014-11-21 12:44 | 显示全部楼层
这儿有肥猫 发表于 2014-11-21 12:34
这个根本不需要用到VBA,很简单的几步操作就可以做到~

我只取了其中的一小部份来作本,实际工作中数据量比较大,而且操作频繁,我也试过用vlook函数加筛选的方法来解决,但还是觉得太繁琐,所以选择用VBA,一次到位。
回复

使用道具 举报

发表于 2014-11-21 12:49 | 显示全部楼层
gylilan 发表于 2014-11-21 12:44
我只取了其中的一小部份来作本,实际工作中数据量比较大,而且操作频繁,我也试过用vlook函数加筛选的方法 ...

我只想告诉你,单元格是全二维,arr1是二维数组,arr2也是二维数组,所以循环变量是  i=1 to ubound(arr1)
arr2(i,1),不是arr2

回复

使用道具 举报

发表于 2014-11-21 12:58 | 显示全部楼层    本楼为最佳答案   
Sub 查找断号()

Dim arr1, arr2, i As Integer, Rng As Range, onlys As New Collection, x As Integer, y As Integer 'str
   
   
    r = [a65536].End(3).Row
    y = Cells(r, 1) - [a1] + 1
   
   
   
   [a1].Resize(r, 1).RemoveDuplicates Columns:=1, Header:=xlNo
   arr1 = [a1].Resize(r, 1).Value
   
  
   ReDim arr2(1 To y)
   
    For x = 1 To y
    arr2(x) = Format(x + [a1] - 1, "000000000")
   
    Next x

For i = 1 To UBound(arr1)
   

    arr2 = Filter(arr2, arr1(i, 1), False, 1)

Next i
For i = 0 To UBound(arr2)
    Cells(i + 2, 3) = arr2(i)
Next i
End Sub


回复

使用道具 举报

 楼主| 发表于 2014-11-21 15:27 | 显示全部楼层
QLZ0602 发表于 2014-11-21 12:58
Sub 查找断号()

Dim arr1, arr2, i As Integer, Rng As Range, onlys As New Collection, x As Integer, ...

代码测试过了,挺好用的,不过一有点不足,就是找出的断号是数值型的,而A列的的数据都是文本型的,希望代码中直接将找出的断号格式设置成与A列的一致,这样就不用每次找完后都要再手动设置了。这个可以解决吗?另外能否请老师告诉我之前的代码错误的原因吗。我初学VBA,希望多向老师学习一下。谢谢
回复

使用道具 举报

 楼主| 发表于 2014-11-21 15:32 | 显示全部楼层
QLZ0602 发表于 2014-11-21 12:58
Sub 查找断号()

Dim arr1, arr2, i As Integer, Rng As Range, onlys As New Collection, x As Integer, ...

我尝试用这句代码,但出来的结果还是数值型。不知道老师有什么简单易会的代码可以解决此问题。谢谢
Cells(r + i + 1, 1) = Format(arr2(i), "000000000")
回复

使用道具 举报

发表于 2014-11-21 16:09 | 显示全部楼层
Cells(r + i + 1, 1) = "'" & Format(arr2(i), "000000000")

评分

参与人数 1 +3 收起 理由
gylilan + 3 很给力!

查看全部评分

回复

使用道具 举报

发表于 2014-11-21 16:09 | 显示全部楼层
原因可qq联系 695982239
回复

使用道具 举报

 楼主| 发表于 2014-11-21 16:17 | 显示全部楼层
QLZ0602 发表于 2014-11-21 16:09
Cells(r + i + 1, 1) = "'" & Format(arr2(i), "000000000")

文本格式的问题解决了,多谢。
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-5 23:52 , Processed in 0.345146 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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