Excel精英培训网

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

[已解决]自动调用指定列的数据到另一指定列,并按规则排序

[复制链接]
发表于 2016-4-12 19:52 | 显示全部楼层 |阅读模式
本帖最后由 cunfu2010 于 2016-4-13 09:01 编辑

学做了一个自动调用指定列的数据到另一指定列,并按规则排序文件,现在基本能实现但存在一些问题:
1、调用数据到指定列后,每次循环后中间都间隔2个空行(单元格)
2、排序最后会多出3行(单元格)
请帮忙看看问题出在哪儿了?如何解决?最好把代码也注释一下。谢谢了!!!
最佳答案
2016-4-12 21:38
  1. Sub yy()
  2. Dim arr, brr, crr, ar, br, j%, s%
  3. [C4£oC34].Clear
  4. crr = [G2:G7]
  5. c = UBound(crr)
  6.     ar = Sheets(1).Range("a3").CurrentRegion
  7.     ReDim br(1 To UBound(ar) - 3, 1 To 3) 'òòÎaar°üo¬Ç°èyDD,μ«êÇ·μ»ØμÄêy¾Y±è×üDDêyéù3,ËùòÔ¼õ3
  8.     For j = 4 To UBound(ar) '′óarμÄμúËÄDD(ò2¾íêÇ3-1oÅÕaDD¿aê¼)
  9.    If ar(j, 2) <> "D&#199;&#198;úáù" And ar(j, 2) <> "D&#199;&#198;úè&#213;" Then
  10.             s = s + 1
  11.             cc = (s + 4) Mod c + 1
  12.             br(j - 3, 1) = crr(cc, 1)   'μ±ì&#245;&#188;t3éá¢brμ&#196;μú1DD&#191;aê&#188;D′è&#235;êy&#190;Y,&#203;ùò&#212;j-3
  13.    End If
  14.     Next
  15.     Sheets(1).Range("C4").Resize(UBound(br), 3) = br
  16. Application.ScreenUpdating = True
  17. End Sub
复制代码

自动填充.rar

17.06 KB, 下载次数: 10

发表于 2016-4-12 20:33 | 显示全部楼层
  1. Sub yy()
  2. Dim arr, brr, crr, ar, br, j%, s%
  3. [C4:C34].Clear
  4. crr = [G2:G7]
  5. c = UBound(crr)
  6.     ar = Sheets(1).Range("a3").CurrentRegion
  7.     ReDim br(1 To UBound(ar) - 3, 1 To 3) '因为ar包含前三行,但是返回的数据比总行数少3,所以减3
  8.     For j = 4 To UBound(ar) - 3  '从ar的第四行(也就是3-1号这行开始)
  9.     If ar(j, 2) <> "星期六" And ar(j, 2) <> "星期日" Then
  10.             s = s + 1
  11.             cc = (s + 4) Mod c + 1
  12.             br(j - 3, 1) = crr(cc, 1)   '当条件成立br的第1行开始写入数据,所以j-3
  13.         End If
  14.     Next
  15.     Sheets(1).Range("C4").Resize(UBound(br), 3) = br
  16. Application.ScreenUpdating = True
  17. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-4-12 21:13 | 显示全部楼层
橘子红 发表于 2016-4-12 20:33

太感谢了,原来是这么回事,另外:
s = s + 1
cc = (s + 4) Mod c + 1

这两句代码怎么理解
回复

使用道具 举报

 楼主| 发表于 2016-4-12 21:16 | 显示全部楼层
本帖最后由 cunfu2010 于 2016-4-12 21:19 编辑
橘子红 发表于 2016-4-12 20:33

还有,按你的代码执行:
1.'    If ar(j, 2) <> "星期六" And ar(j, 2) <> "星期日" Then
2.         s = s + 1
3.        cc = (s + 4) Mod c + 1
4.      br(j - 3, 1) = crr(cc, 1)   '当条件成立br的第1行开始写入数据,所以j-3
5.'        End If
如果第1行和第5行代码运行则中间有2行的空间间隔,如果第1行和第5行代码不运行则最后有3行的空行,怎么处理?
回复

使用道具 举报

发表于 2016-4-12 21:38 | 显示全部楼层    本楼为最佳答案   
  1. Sub yy()
  2. Dim arr, brr, crr, ar, br, j%, s%
  3. [C4£oC34].Clear
  4. crr = [G2:G7]
  5. c = UBound(crr)
  6.     ar = Sheets(1).Range("a3").CurrentRegion
  7.     ReDim br(1 To UBound(ar) - 3, 1 To 3) 'òò&#206;aar°üo&#172;&#199;°èyDD,μ&#171;ê&#199;·μ&#187;&#216;μ&#196;êy&#190;Y±è×üDDêyéù3,&#203;ùò&#212;&#188;&#245;3
  8.     For j = 4 To UBound(ar) '′óarμ&#196;μú&#203;&#196;DD(ò2&#190;íê&#199;3-1o&#197;&#213;aDD&#191;aê&#188;)
  9.    If ar(j, 2) <> "D&#199;&#198;úáù" And ar(j, 2) <> "D&#199;&#198;úè&#213;" Then
  10.             s = s + 1
  11.             cc = (s + 4) Mod c + 1
  12.             br(j - 3, 1) = crr(cc, 1)   'μ±ì&#245;&#188;t3éá¢brμ&#196;μú1DD&#191;aê&#188;D′è&#235;êy&#190;Y,&#203;ùò&#212;j-3
  13.    End If
  14.     Next
  15.     Sheets(1).Range("C4").Resize(UBound(br), 3) = br
  16. Application.ScreenUpdating = True
  17. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2016-4-12 21:56 | 显示全部楼层
橘子红 发表于 2016-4-12 21:38

你好,注释都是乱码,麻烦你看看

点评

额,注释跟2楼的一样,没改  发表于 2016-4-12 22:00
回复

使用道具 举报

 楼主| 发表于 2016-4-12 22:05 | 显示全部楼层
橘子红 发表于 2016-4-12 21:38

谢谢,明白了很多,还是要麻烦你:
s = s + 1
cc = (s + 4) Mod c + 1

这两句代码怎么理解,其他代码我基本上能理解了,这两句实现是不明白
回复

使用道具 举报

发表于 2016-4-13 17:03 | 显示全部楼层
s = s + 1   '累加计数
cc = (s + 4) Mod c + 1    's+4  除以c  的余数 +1
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-6 13:17 , Processed in 0.297481 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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