合并工作簿下的sheet-VBA代码

本文介绍了一个Excel宏,用于自动合并具有相同列数且字段顺序一致的工作表,允许标题行存在差异,用户输入标题行数后即可实现数据整合。
摘要由CSDN通过智能技术生成
  1. 作用: 
    1. 去除多余标题行
    2. 标记是工作表名/sheetname
  2. 使用前提:
    1. 列数相同
    2. 字段的顺序相同
    3. 允许首行为空,允许不在相同的区域,比如,一个在A1:D4,一个在G3:C6
  3. 使用方法:
    1. 复制,粘贴到宏模块内,运行即可

Sub 合并工作表()
    Dim Sht As Worksheet, rng As Range, k&, n&, c&, a&, b&
    Dim result As Integer
    Application.ScreenUpdating = False
    '取消屏幕更新
    n = Val(InputBox("请输入标题的行数", "默认为1", 1))
    If n < 0 Then MsgBox "标题行数不能为负数。", 64, "提示": Exit Sub
    '取得用户输入的标题行数,如果为负数,退出程序
    Cells.ClearContents
    '清空当前表数据
   
    a = 1 '从a1开始填充
    For Each Sht In Worksheets
    '遍历工作表
        If Sht.Name <> ActiveSheet.Name Then
        '如果工作表名称不等于当前表名则进行汇总动作……
            Set rng = Sht.UsedRange
            
            '定义rng为表格已用区域
            k = k + 1 '标记是不是第一张表
            '累计K值
            If k = 1 Then
            '如果是首个表格,则K为1,则把标题行一起复制到汇总表
                rng.Copy
                [b1].PasteSpecial Paste:=xlPasteValues '仅粘贴数值 第一列留给工作表名
                c = Sht.UsedRange.Rows.Count '计算收割表的行数
            Else
                '否则,扣除标题行后再复制黏贴到总表,只黏贴数值
                rng.Offset(n).Copy
                Cells(ActiveSheet.UsedRange.Rows.Count + 1, 2).PasteSpecial Paste:=xlPasteValues
                c = Sht.UsedRange.Rows.Count - n '计算当前表的行数
            End If
            c = c + b '加上之前表的行数
            Range("A" & a & ":A" & c).Value = Sht.Name
            a = c + 1 '从以使用的表行的下一行开始粘贴
            b = c  '存储上一次表的粘贴行数
        End If
    Next
    
    Range("A1").Value = "工作表名"
    
    Application.ScreenUpdating = True '恢复屏幕刷新
End Sub

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值