Excel精英培训网

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

[已解决]复杂填充

[复制链接]
发表于 2013-12-2 18:04 | 显示全部楼层 |阅读模式
本帖最后由 张雄友 于 2013-12-2 20:44 编辑

填充序列,没有反应。
最佳答案
2013-12-2 20:24
本帖最后由 xdragon 于 2013-12-2 20:28 编辑
张雄友 发表于 2013-12-2 19:58
执行代码后,最小值不是从2开始的?而且最后一个单元出现了错误值。


我这里执行正常啊,而且,你的默认值根本就达不到,因为03版本的最大行数是65535,40000*3已经超出最大行数了。
  1. Sub 填充序列()

  2. Dim i&, arr, rng As Range, First As String, Last As String

  3. First = Val(InputBox("请输入起始值", "温馨提示", "2"))
  4. Last = Val(InputBox("请输入结束值", "温馨提示", "40000"))
  5. Set rng = Application.InputBox("在哪个单元格开始生成?", "温馨提示", , , , , , 8)

  6. If Len(First) = 0 Or Len(Last) = 0 Or rng Is Nothing Then Exit Sub
  7. If (Last - First + 1) * 3 > Rows.Count Then MsgBox "生成的数据列大于表格最大允许的行", , "提示"

  8. ReDim arr(1 To (Last - First + 1) * 3, 1 To 1)
  9. TT = Timer

  10. For i = 1 To UBound(arr)
  11. arr(i, 1) = First + (i - 1) \ 3
  12. Next

  13. rng.Resize(UBound(arr)) = arr

  14. MsgBox "用时" & Format(Timer - TT, "0.00") & "秒"

  15. End Sub
复制代码
稍微做了下小改动。。。

填充序列.rar

71.38 KB, 下载次数: 10

发表于 2013-12-2 18:19 | 显示全部楼层
技巧可以 先手如图输入  选中  这个区域 下拉 在定位空值 = 上一个单元格
1233.jpg
回复

使用道具 举报

 楼主| 发表于 2013-12-2 18:49 | 显示全部楼层
我心飞翔410 发表于 2013-12-2 18:19
技巧可以 先手如图输入  选中  这个区域 下拉 在定位空值 = 上一个单元格

估计要1年时间。

点评

恩 一年  发表于 2013-12-2 19:00
回复

使用道具 举报

发表于 2013-12-2 19:01 | 显示全部楼层
张雄友 发表于 2013-12-2 18:49
估计要1年时间。

这个方法很快啊,为什么要1年时间{:161:}

飞翔漏了个ctrl+enter确定输入公式
回复

使用道具 举报

 楼主| 发表于 2013-12-2 19:07 | 显示全部楼层
xdragon 发表于 2013-12-2 19:01
这个方法很快啊,为什么要1年时间

飞翔漏了个ctrl+enter确定输入公式

我明白他的意思,用鼠标拖。再定位空值,输入=,上箭头,ctrl+enter。
回复

使用道具 举报

发表于 2013-12-2 19:46 | 显示全部楼层
Set rng = Application.InputBox("在哪个单元格开始生成?", "温馨提示", , , , , , 8)

If First = "" Or Last = "" Then Exit Sub这两句导致程序直接跳出了,未进入循环
回复

使用道具 举报

发表于 2013-12-2 19:51 | 显示全部楼层
  1. Sub 填充序列()    '修改后代码,不一定合适,仅作参考
  2.     On Error Resume Next
  3.     Dim i&, m&, arr(), First As String, Last As String
  4.     First = Val(InputBox("请输入起始值", "温馨提示", "2"))
  5.     Last = Val(InputBox("请输入结束值", "温馨提示", "40000"))
  6.     If First = "" Or Last = "" Then Exit Sub
  7.     Application.ScreenUpdating = False
  8.     TT = Timer
  9.     ReDim arr(4 To Last + 3, 1 To 1)
  10.     For i = 1 To Last + 3 Step 3
  11.         arr(i, 1) = 1 + (i - First) \ 3
  12.         arr(i + 1, 1) = 1 + (i - First) \ 3
  13.         arr(i + 2, 1) = 1 + (i - First) \ 3
  14.     Next
  15.     Range("i1").Resize(Last, 1) = arr
  16.     MsgBox "用时" & Format(Timer - TT, "0.00") & "秒"
  17.     Application.ScreenUpdating = True
  18. End Sub
复制代码

点评

呵呵 厉害  发表于 2013-12-2 19:53
回复

使用道具 举报

发表于 2013-12-2 19:54 | 显示全部楼层
张雄友 发表于 2013-12-2 19:07
我明白他的意思,用鼠标拖。再定位空值,输入=,上箭头,ctrl+enter。
  1. Sub 填充序列()
  2. Dim i&, arr, rng As Range, First As String, Last As String

  3. First = Val(InputBox("请输入起始值", "温馨提示", "2"))

  4. Last = Val(InputBox("请输入结束值", "温馨提示", "40000"))

  5. Set rng = Application.InputBox("在哪个单元格开始生成?", "温馨提示", , , , , , 8)

  6. If First = "" Or Last = "" Or rng = "" Then Exit Sub

  7. If (Last - First + 1) * 3 > Rows.Count Then MsgBox "生成的数据列大于表格最大允许的行", , "提示"

  8. ReDim arr(1 To (Last - First + 1) * 3, 1 To 1)

  9. TT = Timer

  10. For i = 1 To UBound(arr)

  11. arr(i, 1) = First + (i - 1) \ 3

  12. Next

  13. rng.Resize(UBound(arr)) = arr

  14. MsgBox "用时" & Format(Timer - TT, "0.00") & "秒"

  15. End Sub
复制代码
我明白你说的原因了,不过即使不用vba也是有办法的,vba我按照你的基础上稍微改动了下哈。你看下吧
回复

使用道具 举报

 楼主| 发表于 2013-12-2 19:58 | 显示全部楼层
xdragon 发表于 2013-12-2 19:54
我明白你说的原因了,不过即使不用vba也是有办法的,vba我按照你的基础上稍微改动了下哈。你看下吧

执行代码后,最小值不是从2开始的?而且最后一个单元出现了错误值。
回复

使用道具 举报

 楼主| 发表于 2013-12-2 20:01 | 显示全部楼层
风林火山 发表于 2013-12-2 19:51

执行代码后,最小值不是从2开始的?怎么是从1开始的?
回复

使用道具 举报

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

本版积分规则

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

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

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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