Excel精英培训网

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

[已解决]各位大虾,帮帮忙,该表约有1500行,得先找出需剪切的,最后将空行清理掉

[复制链接]
发表于 2012-11-4 20:57 | 显示全部楼层 |阅读模式
5学分
本帖最后由 胖子22 于 2012-11-5 21:43 编辑

将表1内容转换成表2形式
最佳答案
2012-11-5 23:29
研究了半天算是搞懂了,中间的剪切 位置有可能与你想的不一样,因为没有更多相关数据,所以就只有根据附件来判断了
如果是插入固定的列数 则修改 L = L + .Range(.Cells(X, "I"), .Cells(X, Lx)).Columns.Count
比如固定插入10列,则 L=L+10

其它的代码都有说明,你自己慢慢研究下,应该能自己修改!

  1. Sub 调整()
  2. Dim Arr(), Hx As Long, X As Long, Ma As Integer, Lx As Integer
  3. Dim L As Integer, H As Long
  4.   Application.ScreenUpdating = False  '关闭屏幕更新
  5.   With Sheets("Sheet1")   '指定要操作的表
  6.     Hx = .Range("I65536").End(xlUp).Row   '提取 I 列使用到的最后一行的行号
  7.     With .Range("T1:V" & Hx)    '指定操作 T,V 列
  8.       Arr = .Value    '将值放到数组
  9.       .ClearContents  '清除单元格中的值
  10.     End With
  11.     L = 19    '要插入数据的初始列数 19 列则是 S 列
  12.     For X = Hx To 1 Step -1   '倒循环
  13.       If Len(.Cells(X, "H")) = 0 Then   '如果 H 列中没有值,就执行下面的代码
  14.         Lx = .Cells(X, "IV").End(xlToLeft).Column   '提取该行使用到的最一列的列号
  15.         H = .Cells(X, "H").End(xlUp).Row    '提取该行往上 有数据行 的行号
  16.         
  17.         .Range(.Cells(X, "I"), .Cells(X, Lx)).Cut .Cells(H, L)
  18.         '将数据区域 剪切 到 单元格(h行,l列)
  19.         
  20.         L = L + .Range(.Cells(X, "I"), .Cells(X, Lx)).Columns.Count
  21.         '计算下一个数据要剪切到的 列 号,
  22.       Else
  23.         If L > Ma Then Ma = L   '记录使用的最大的列号
  24.         L = 19    '初始 列号
  25.       End If
  26.     Next
  27.     .Cells(1, Ma).Resize(UBound(Arr), UBound(Arr, 2)) = Arr   '将原 T:V 列的数据重新写回新的单元格位置
  28.     .Columns("G:G").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
  29.     '使用 定位》空值 功能,整行删除 G:G 列中有空值的行
  30.   End With
  31.   Application.ScreenUpdating = True  '打开屏幕更新
  32. End Sub
复制代码

表样.zip

21.35 KB, 下载次数: 27

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2012-11-4 20:59 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-11-4 21:00 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2012-11-4 21:12 | 显示全部楼层
多谢了,您在写么?我在线等您,想给您发短消息,系统提示不让用,郁闷
回复

使用道具 举报

发表于 2012-11-4 21:43 | 显示全部楼层
是要把空行都填成上一行的内容吗?
选取数据区域》F5》定位条件》空值》确定,查看名称框里的地址,在编辑栏里录入=名称框地址的上一个,比如名称框里是A5,那就录入 =A4,最后按Ctrl+Enter结束。
回复

使用道具 举报

 楼主| 发表于 2012-11-4 21:55 | 显示全部楼层
看来问题我没描述清楚,重新描述如下:1、需查找出前8列为空的行查找出来;2将前8行为空的行中有效数据复制到上一行的末尾;3、如果前8行为空的连续出现,需将连续的这几行均重复上述操作,与最近的那个不为空的行连成一大行;4、清除掉复制过的数据变为空行;5、清除掉空行,最终形成一个新表
回复

使用道具 举报

 楼主| 发表于 2012-11-5 17:42 | 显示全部楼层
,没人帮忙吗!求求各位高手了,再拖一天我可要失业了
回复

使用道具 举报

发表于 2012-11-5 18:29 | 显示全部楼层
不光没有说清楚,附件里的结果没有说明,也让人头晕啊!!

只有你才 知道怎么处理数据,结果你又不会写代码!!

会写代码的人呢又看不懂你的表,真是恼火!!
回复

使用道具 举报

发表于 2012-11-5 18:43 | 显示全部楼层
胖子22 发表于 2012-11-4 21:55
看来问题我没描述清楚,重新描述如下:1、需查找出前8列为空的行查找出来;2将前8行为空的行中有效数据复制 ...

附件中并没有名称为 sheet1 的表,只有sheet2和sheet3
根据codename来看的话,好像也不对

根据你的描述来看问题
将前8列为空的行找出来,那就是 A到H 列中的空行
第一行是空的,为啥不处理?

将前8行为空的行中有效数据复制到上一行的末尾
既然是空的行,那里来的有效数据呢??

3、如果前8行为空的连续出现,需将连续的这几行均重复上述操作,与最近的那个不为空的行连成一大行;
不论是sheet2,还是sheet3前8行都只有局部单元格是空的,所以依然看不懂

4、清除掉复制过的数据变为空行
这个问题就是删除掉空行吧?为啥有的空行依然保留呢?


回复

使用道具 举报

 楼主| 发表于 2012-11-5 21:47 | 显示全部楼层
无聊的疯子 发表于 2012-11-5 18:43
附件中并没有名称为 sheet1 的表,只有sheet2和sheet3
根据codename来看的话,好像也不对

我疏忽了,重新修订了表样,其实就是把两行最多四行的内容接成一行,前几列是空值的接到上一行的后面,抱歉!!!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-13 09:09 , Processed in 0.359349 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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