Excel精英培训网

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

[已解决]用VBA或宏进行排列填充

[复制链接]
发表于 2014-12-24 14:09 | 显示全部楼层 |阅读模式
本帖最后由 superle! 于 2014-12-26 09:27 编辑

J2:J为数据源,为了让数据源的数值好认,用数值顺序看明白些,J3002以下的数值会随时增加的,所以以J列最下面有值的开始取。
用VBA或是用宏来实现表2表格里BJ301:CS的填充。隔1到隔3的值已经模拟出来了。
比如表2BJ324的值就是表1J3003的空值,表2BJ324往上取值从无隔到隔10都是没有隔的取值。
往右是按无隔到隔10的取值。比如表2的324行,是从J3001:J3000:J2999:依次取值填充的。这是无隔
隔1,表2的360行,是从J3000:J2998:J2996依次取值填充的。这是隔1
可以参考批注里对应的批注来查看所填充的排序。

最佳答案
2014-12-25 06:14
  1. Sub Macro1()
  2. Dim arr, brr, i&
  3. Sheet2.Activate
  4. arr = Sheet1.Range("j2:j" & Sheet1.Range("j65536").End(xlUp).Row + 1)
  5. h = UBound(arr)
  6. For i = 301 To Cells(Rows.Count, "bi").End(xlUp).Row
  7.     If Cells(i, "bi") <> "" Then
  8.         s = s + 1
  9.         brr = Cells(i, "bj").Resize(24, 36)
  10.         n = 0
  11.         For j = UBound(brr) To 1 Step -1
  12.             n = n + 1
  13.             For k = 1 To UBound(brr, 2)
  14.                 brr(j, k) = arr(h - n + 1 - (k - 1) * s, 1)
  15.             Next
  16.         Next
  17.         Cells(i, "bj").Resize(24, 36) = brr
  18.     End If
  19. Next
  20. End Sub
复制代码

用VBA或宏进行排列填充.rar

42.75 KB, 下载次数: 15

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-12-25 06:14 | 显示全部楼层    本楼为最佳答案   
  1. Sub Macro1()
  2. Dim arr, brr, i&
  3. Sheet2.Activate
  4. arr = Sheet1.Range("j2:j" & Sheet1.Range("j65536").End(xlUp).Row + 1)
  5. h = UBound(arr)
  6. For i = 301 To Cells(Rows.Count, "bi").End(xlUp).Row
  7.     If Cells(i, "bi") <> "" Then
  8.         s = s + 1
  9.         brr = Cells(i, "bj").Resize(24, 36)
  10.         n = 0
  11.         For j = UBound(brr) To 1 Step -1
  12.             n = n + 1
  13.             For k = 1 To UBound(brr, 2)
  14.                 brr(j, k) = arr(h - n + 1 - (k - 1) * s, 1)
  15.             Next
  16.         Next
  17.         Cells(i, "bj").Resize(24, 36) = brr
  18.     End If
  19. Next
  20. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2014-12-26 08:09 | 显示全部楼层
dsmch 发表于 2014-12-25 06:14

谢谢你,已经正确了 。还有一个问题需要你修改下,之前是表2无隔到隔10的排列,我现在想从无隔到隔249的排列,应该代码里怎么修改呢?
回复

使用道具 举报

发表于 2014-12-26 08:16 | 显示全部楼层
表二设置好格式,代码无须改动
回复

使用道具 举报

 楼主| 发表于 2014-12-26 09:27 | 显示全部楼层
dsmch 发表于 2014-12-26 08:16
表二设置好格式,代码无须改动

你这个比较人性化,之前还搞不懂,原来还有这个功能,谢谢你了。
回复

使用道具 举报

发表于 2014-12-26 09:40 | 显示全部楼层
格式用代码完成

用VBA或宏进行排列填充.zip

54.63 KB, 下载次数: 17

回复

使用道具 举报

 楼主| 发表于 2014-12-26 09:51 | 显示全部楼层
dsmch 发表于 2014-12-26 09:40
格式用代码完成

为什么运行时,下标越界了。
b1.png

点评

表一数据太少,无数据填充。原代码前增加一句纠错处理:on error resume next  发表于 2014-12-26 10:09
回复

使用道具 举报

 楼主| 发表于 2015-1-18 19:42 | 显示全部楼层
dsmch 发表于 2014-12-25 06:14

你好,再帮我一个忙,增加一个功能。谢谢了
在原VBA基础上增加一个功能。实物表1的BJ3001为准,实现从无隔到隔249的排列填充在表2的BJ9337:DQ18288的实现。

用VBA或宏进行排列填充增加功能.rar

290.28 KB, 下载次数: 2

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-27 11:19 , Processed in 0.593284 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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