Excel精英培训网

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

[已解决]VBA序号问题

[复制链接]
发表于 2015-3-3 21:21 | 显示全部楼层 |阅读模式
本帖最后由 龙送农 于 2015-3-4 09:28 编辑

这是dsmch 帮写的序号代码,有2条信息才能运行。我想要的效果就是:只有1条信息也能运行。
Sub 序号()
Dim arr, i&
Sheets("出入库台账").Activate
arr = Range("e5:e" & [E65536].End(3).Row)
For i = 1 To UBound(arr)
    arr(i, 1) = i
Next
[a5:a65536].ClearContents
Range("a5").Resize(UBound(arr)) = arr
End Sub
最佳答案
2015-3-4 05:15
  1. Sub 序号()
  2. Dim arr, i&, n&
  3. Sheets("出入库台账").Activate
  4. [a5:a65536].ClearContents
  5. n = [E65536].End(3).Row
  6. If n < 5 Then
  7.     Exit Sub
  8. ElseIf n = 5 Then
  9.     [a5] = 1
  10. Else
  11.     arr = Range("e5:e" & n)
  12.     For i = 1 To UBound(arr)
  13.         arr(i, 1) = i
  14.     Next
  15.     Range("a5").Resize(UBound(arr)) = arr
  16. End If
  17. End Sub
复制代码

VBA序号问题.zip

29.19 KB, 下载次数: 13

发表于 2015-3-3 21:49 | 显示全部楼层
  1. Sub 序号()
  2.     Dim x%
  3.     For x = 5 To [e65536].End(3).Row
  4.         Cells(x, 1) = x - 4
  5.     Next
  6. End Sub
复制代码
VBA序号问题.rar (22.47 KB, 下载次数: 9)
回复

使用道具 举报

发表于 2015-3-3 21:57 | 显示全部楼层
dsmch 老师的这个是数组,所以要是数据量大的话,速度应该快很多。。。只是我不明白你的  有2条信息才能运行。我想要的效果就是:只有1条信息也能运行   是什么意思
回复

使用道具 举报

 楼主| 发表于 2015-3-3 22:27 | 显示全部楼层
excel小米 发表于 2015-3-3 21:57
dsmch 老师的这个是数组,所以要是数据量大的话,速度应该快很多。。。只是我不明白你的  有2条信息才能运行 ...

dsmch 老师的这个是数组,所以要是数据量大的话,速度快,但只有1条信息时,不能运行。我的意思是只有1条信息也能运行。
回复

使用道具 举报

 楼主| 发表于 2015-3-3 22:32 | 显示全部楼层
雪舞子 发表于 2015-3-3 21:49

dsmch 老师的这个数组速度快,如果您的这个能快速就好了。
回复

使用道具 举报

发表于 2015-3-3 22:39 | 显示全部楼层
龙送农 发表于 2015-3-3 22:32
dsmch 老师的这个数组速度快,如果您的这个能快速就好了。

对于你的表格,速度不会有明显区别,

单元格操作的有点就是方便简便,

对于一些数据量不大的表格也是有一定优势的
回复

使用道具 举报

发表于 2015-3-3 22:49 | 显示全部楼层
如果你只是序号问题,根本没有用VBA的必要,

甚至函数也不用,

直接输入,然后下拉,是最简便快速的,

用vba做序号,而且还要用数组,有点像“牛刀杀鸟”的感觉,呵呵!

点评

下拉也不用,有几万数据,用填充序列更为快捷  发表于 2015-3-4 09:18
回复

使用道具 举报

 楼主| 发表于 2015-3-3 23:19 | 显示全部楼层
雪舞子 发表于 2015-3-3 22:49
如果你只是序号问题,根本没有用VBA的必要,

甚至函数也不用,

我的表是从“入库单”保存进来的,第1次保存进来的有时只有1条,但只有1条信息时,dsmch 老师写的代码不能运行。一年下来就有6000条左右。如果能在dsmch 老师写的代码修改一下,1条信息也能运行。
回复

使用道具 举报

发表于 2015-3-3 23:49 | 显示全部楼层
Sub 序号()
Dim arr, i&
Sheets("出入库台账").Activate
arr = Range("e5:e" & [E65536].End(3).Row + 1)
For i = 1 To UBound(arr) - 1
    arr(i, 1) = i
Next
[a5:a65536].ClearContents
Range("a5").Resize(UBound(arr)) = arr
End Sub
回复

使用道具 举报

发表于 2015-3-4 05:15 | 显示全部楼层    本楼为最佳答案   
  1. Sub 序号()
  2. Dim arr, i&, n&
  3. Sheets("出入库台账").Activate
  4. [a5:a65536].ClearContents
  5. n = [E65536].End(3).Row
  6. If n < 5 Then
  7.     Exit Sub
  8. ElseIf n = 5 Then
  9.     [a5] = 1
  10. Else
  11.     arr = Range("e5:e" & n)
  12.     For i = 1 To UBound(arr)
  13.         arr(i, 1) = i
  14.     Next
  15.     Range("a5").Resize(UBound(arr)) = arr
  16. End If
  17. End Sub
复制代码

点评

下拉、填充都没必要。既然是从“入库单”保存进来的,直接把序号带过来就行了,干嘛非要费二遍事呢?  发表于 2015-3-4 10:22
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 21:26 , Processed in 0.578702 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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