01 工作表

参照《模板表》批量生成工作表并填写指定内容

一个关于样表拆分和数据填入的问题

Question:

  有一个资金划单的明细表,它是汇总的一个表格,我现在要把"交易金额"、"摘要"这两个信息,以"单位"为区分,填到分公司表里,单位太多了,要是能不能有快捷的方法,我这些是需要按公司打印出来的?

  这个是资金划单的"汇总表部分"截图:

点击放大的图片

  这个是要填写到"分公司"的表:

点击放大的图片

  最终要把摘要和金额填到这里,一个单位一个表:

点击放大的图片
Answer1:

  根据描述,其实可以把主要动作分成两个:一个是按照单位拆分表,一个是数据的填入!

  工作表的拆分:之前写过一个类似的过程,🔗工作表按指定列-批量拆分成工作簿或工作表,不过里面只是拆分,没有数据填入"分公司表"的过程。工作表拆分的这个动作我们直接参考这个过程就可以!

Answer2:

  数据填入:因为所需要填写的内容,不管是在“明细汇总表”、还是“分公司表”,列位置和首行的位置都是固定的,可以先依据“单位”名称添加多个新表,新表样本就参考(复制)“分公司表”,然后在增加一个循环判断的过程、给“目标表”的固定位置赋值就可以了!

运行视频:

源码下载:

VBA实现过程:
  • 1.用Application.InputBox和用户交互,让她/他来自定义选择需要拆分的内容所在列;
  • 2.Colection有序集合的特点,保留列内容的不重复值;
  • 3.循环集合的元素,添加新表、重命名;
  • 4.主程序逻辑实现过程
  • ①循环添加的新表,复制"模版表"粘贴到新表中,
  • ②嵌套一个循环,判断"汇总明细表"内的'单位'是否和新表名称一致,如果一致就将需要填入的值,赋值到该"目标表"中,
  • 5.结束!
示例代码
复制成功!
1

Sub 工作表按模板复制拆分()
    '----------------------------------------------------
     '自定义各数据类型
    Dim Splitcol, rng As Range
    Dim Colnum As Integer, Arr, Lastrow, i, Shtindex, Only As New Collection

    On Error Resume Next
    '-----------------------------------------------------
    '指定需要的拆分条件列
    Set Splitcol = Application.InputBox("选择单位所属的单元格区域", "选择单位", Type:=8)
    If Err.Number > 0 Then MsgBox "未选择内容": Exit Sub
    If WorksheetFunction.CountA(Splitcol.EntireColumn) = 0 Then MsgBox "选择的列内容为空": Exit Sub
    '-----------------------------------------------------
    On Error GoTo 0


    With Splitcol.Parent
        Colnum = Splitcol.Column
        Lastrow = .UsedRange.Rows.Count

        '-------------------------------------------------
        '对需要拆分的条件列的值剔除重复值,利用Colection有序集合的成员不能存在重复内容的作用
        Arr = .Range(.Cells(7, Colnum), .Cells(Lastrow, Colnum))
        On Error Resume Next   '在本实例中为 I列"单位"的不重复值
        For i = 1 To Lastrow - 7
            If Len(Arr(i, 1)) > 0 Then Only.Add CStr(Arr(i, 1)), CStr(Arr(i, 1))
        Next i


        Application.ScreenUpdating = False '关闭屏幕更新,加快执行速度
        Application.DisplayAlerts = False  '关闭显示特定的警告和消息,删除已经存在相同名字的工作表时,不弹出消息

        For i = 1 To Only.Count  '循环包含"名称"的集合,依次添加新工作表,并命名
            Err.Clear
            Sheets.Add After:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
            Sheets(Sheets.Count).Name = Only(i)
            If Err.Number > 0 Then Sheets(Only(i)).Delete: Sheets(Sheets.Count).Name = Only(i)

        Next i

        '------------------------------------------------
        '遍历拆分出的工作表,把明细表众的相应内容拆分到各分表中

        For i = 1 To Only.Count
            Shtindex = 7
            Sheets("表模板").Cells.Copy  '模版表复制
            Sheets(Only(i)).Paste        '新表粘贴
            For Each rng In Splitcol     '循环指定列(基础数据表里的I列)
                If rng = Only(i) Then    '如果和拆分出表的名称一致,就......
                    ThisWorkbook.Sheets(Only(i)).Cells(Shtindex, 4) = rng.Offset(0, -3) '基础数据明细表的"交易金额",写入D列
                    ThisWorkbook.Sheets(Only(i)).Cells(Shtindex, 1) = rng.Offset(0, 1)  '基础数据明细表的"摘要",写入A列
                    Shtindex = Shtindex + 1
                End If
            Next rng

        Next i
        .AutoFilterMode = False
   End With
    Application.ScreenUpdating = True
    Application.DisplayAlerts = True
    ThisWorkbook.Save
    MsgBox "完成"

End Sub

请开发者喝杯咖啡 请开发者喝杯咖啡!