Excel精英培训网

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

[已解决]求助改进合并表格程序!

[复制链接]
发表于 2013-4-22 12:37 | 显示全部楼层 |阅读模式
描述:一个文件中有N个表,我想把每个表格中的内容合并到一个表格中,但每个表格遇到空格就不采集,从第二个表开始采集,同样遇到空格就采集一个表的内容。详情见附件
最佳答案
2013-4-22 13:13
就跟你改了下,其他的没动。
  1. Sub 合并()
  2.     Dim x As Integer
  3.     Dim y As Integer    '明细表的最后一行
  4.     Dim z As Integer
  5.     Dim zz As Integer    '第几行开始复制
  6.     Application.ScreenUpdating = False
  7.     Application.DisplayAlerts = False
  8.     zz = Application.InputBox("不含标题行,从明细表第几行取数", "复制数据", 4)
  9.     z = zz

  10.     '复制标题
  11.     If zz > 1 Then
  12.         If Sheets(1).Name <> "合并" Then
  13.             Sheets(1).Rows(1 & ":" & zz - 1).Copy Range("A1")    '
  14.         Else
  15.             Sheets(2).Rows(1 & ":" & zz - 1).Copy Range("A1")    '
  16.         End If
  17.     End If

  18.     Range(z & ":65536").Clear

  19.     For x = 1 To Worksheets.Count
  20.         If Sheets(x).Name <> "合并" Then
  21.             z = [b65536].End(xlUp).Row
  22.             y = Sheets(x).[a1].End(xlDown).Row
  23.             If y < zz Then GoTo 100    '为空表就不复制
  24.             Sheets(x).Rows(zz & ":" & y).Copy Range("A" & z + 1)    'zz明细表第几行取数
  25. 100:
  26.         End If
  27.     Next x

  28.     '加明细表名称
  29.     Dim ss As Integer


  30.     ss = Cells(zz - 1, 256).End(xlToLeft).Column + 1    '增加一列,显示明细表名称
  31.     Cells(zz - 1, ss) = "明细表"
  32.     For x = 1 To Worksheets.Count
  33.         If Sheets(x).Name <> "合并" Then
  34.             z = Cells(65536, ss).End(xlUp).Row
  35.             y = Sheets(x).[a1].End(xlDown).Row
  36.             If y < zz Then GoTo 200    '为空表就不复制
  37.             Range(Cells(z + 1, ss), Cells(z + 1 + y - zz, ss)) = Sheets(x).Name    '加明细表名称
  38. 200:
  39.         End If
  40.     Next x

  41.     With Sheets("合并")
  42.         ROW1 = .Range("B65536").End(xlUp).Row
  43.         For K = ROW1 To zz + 1 Step -1
  44.             If .Cells(K, 2) = "" Then Cells(K, 2).EntireRow.Delete
  45.         Next K

  46.         .Cells(1, 2).Select

  47.     End With
  48.     MsgBox "合并成功!!", , "提示您"

  49.     Application.ScreenUpdating = True
  50.     Application.DisplayAlerts = True
  51. End Sub
复制代码

298443-VBA-合并工作表(程序).rar

13.97 KB, 下载次数: 16

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-4-22 13:10 | 显示全部楼层
有表2那样的情况,出现空格后,下面又有数据吗?
回复

使用道具 举报

发表于 2013-4-22 13:13 | 显示全部楼层    本楼为最佳答案   
就跟你改了下,其他的没动。
  1. Sub 合并()
  2.     Dim x As Integer
  3.     Dim y As Integer    '明细表的最后一行
  4.     Dim z As Integer
  5.     Dim zz As Integer    '第几行开始复制
  6.     Application.ScreenUpdating = False
  7.     Application.DisplayAlerts = False
  8.     zz = Application.InputBox("不含标题行,从明细表第几行取数", "复制数据", 4)
  9.     z = zz

  10.     '复制标题
  11.     If zz > 1 Then
  12.         If Sheets(1).Name <> "合并" Then
  13.             Sheets(1).Rows(1 & ":" & zz - 1).Copy Range("A1")    '
  14.         Else
  15.             Sheets(2).Rows(1 & ":" & zz - 1).Copy Range("A1")    '
  16.         End If
  17.     End If

  18.     Range(z & ":65536").Clear

  19.     For x = 1 To Worksheets.Count
  20.         If Sheets(x).Name <> "合并" Then
  21.             z = [b65536].End(xlUp).Row
  22.             y = Sheets(x).[a1].End(xlDown).Row
  23.             If y < zz Then GoTo 100    '为空表就不复制
  24.             Sheets(x).Rows(zz & ":" & y).Copy Range("A" & z + 1)    'zz明细表第几行取数
  25. 100:
  26.         End If
  27.     Next x

  28.     '加明细表名称
  29.     Dim ss As Integer


  30.     ss = Cells(zz - 1, 256).End(xlToLeft).Column + 1    '增加一列,显示明细表名称
  31.     Cells(zz - 1, ss) = "明细表"
  32.     For x = 1 To Worksheets.Count
  33.         If Sheets(x).Name <> "合并" Then
  34.             z = Cells(65536, ss).End(xlUp).Row
  35.             y = Sheets(x).[a1].End(xlDown).Row
  36.             If y < zz Then GoTo 200    '为空表就不复制
  37.             Range(Cells(z + 1, ss), Cells(z + 1 + y - zz, ss)) = Sheets(x).Name    '加明细表名称
  38. 200:
  39.         End If
  40.     Next x

  41.     With Sheets("合并")
  42.         ROW1 = .Range("B65536").End(xlUp).Row
  43.         For K = ROW1 To zz + 1 Step -1
  44.             If .Cells(K, 2) = "" Then Cells(K, 2).EntireRow.Delete
  45.         Next K

  46.         .Cells(1, 2).Select

  47.     End With
  48.     MsgBox "合并成功!!", , "提示您"

  49.     Application.ScreenUpdating = True
  50.     Application.DisplayAlerts = True
  51. End Sub
复制代码
回复

使用道具 举报

 楼主| 发表于 2013-4-25 15:00 | 显示全部楼层
我对照了原代码,怎么看不出你改在哪里了
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 17:41 , Processed in 1.341764 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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