用VBA创建数据透视表

作者:iamlaosong

有个拣货报表,想先从货品信息中分离出颜色信息,再根据储位、名称和颜色创建一个数据透视表,由于数据是变化的(结构不变,记录数会变),每次重新创建很麻烦,因此想做个工具,用VBA分离颜色并创建数据透视表,供其他人使用。分离颜色的代码很好写,创建数据透视表的代码自然采用录制宏的方法最简单,代码出来后修改一下就行了。工具界面如下:

拣货单的内容如下,需要分离SKU信息中的颜色:

工具的代码如下:

'分离信息
Sub separate_information()

    On Error GoTo Err
    thisfile = ThisWorkbook.name   '本文件的名字,这样赋值就可以随便改名了
    Worksheets("系统参数").Select
    If Cells(2, 2) = "Y" Or Cells(2, 2) = "y" Then                              '导出出库文件
        Application.ScreenUpdating = True
    Else
        Application.ScreenUpdating = False
    End If

    'curdate = Cells(2, 2)
    'pos_qsh = Cells(2, 7)
    'pos_sku = Asc(Cells(3, 7)) - 64
    pos_fst = Cells(2, 7)
    pos_sku = Cells(3, 7)
    pos_sav = Cells(4, 7)
    pos_tag = Cells(5, 7)
    pos_end = Cells(6, 7)

    'If MsgBox("开始生成清分数据......", vbOKCancel, "iamlaosong") = vbCancel Then Exit Sub

    lineno = [A65536].End(xlUp).Row           '行数,文件数量

    For unit_num = 5 To lineno                 '文件循环

        datfile = Cells(unit_num, 2)                              '文件名称
        datFullName = ThisWorkbook.Path & "\" & datfile
        If Dir(datFullName, vbNormal) <> vbNullString Then
            Workbooks.Open Filename:=datFullName        '打开订单文件
            ext = Right(datfile, 3)
            If ext = "xls" Then
                MaxRow = Cells(65536, pos_sku).End(xlUp).Row
            Else
                MaxRow = Cells(1048576, pos_sku).End(xlUp).Row
            End If
        Else
            MsgBox "数据文件不存在!", vbOKOnly, "iamlaosong"
            Exit Sub
        End If

        tag_len = Len(pos_tag)
        Cells(pos_fst - 1, pos_sav) = pos_tag
        Cells(pos_fst - 1, pos_sav).Font.Bold = True

        '分离信息,取pos_tag和pos_end之间的信息
        For row1 = pos_fst To MaxRow
            'If row1 = 193 Then
            '    Debug.Print row1
            'End If
            buf = Cells(row1, pos_sku)
            m1 = InStr(1, buf, pos_tag, vbTextCompare)
            If m1 > 0 Then
                m2 = InStr(m1 + tag_len, buf, pos_end, vbTextCompare)
                buf_sel = Mid(buf, m1 + tag_len, m2 - m1 - tag_len)
            Else
                buf_sel = "notfound"
            End If
            Cells(row1, pos_sav + 0) = buf_sel
            '单元格中的数值是文本的,转换成数值型
            tmp = Cells(row1, 7)
            Cells(row1, 7) = CInt(tmp)
        Next row1
        '建立数据透视表
        pdata1 = ActiveSheet.name & "!R1C1:R" & MaxRow & "C9"
        Sheets.Add
        pdata2 = ActiveSheet.name & "!R3C1"
        ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=pdata1, _
            Version:=xlPivotTableVersion12).CreatePivotTable TableDestination:=pdata2, _
            TableName:="拣货单数据透视表", DefaultVersion:=xlPivotTableVersion12
        '设置透视表格式,表格型、无小计
        Cells(3, 1).Select
        ActiveSheet.PivotTables("拣货单数据透视表").PivotFields("拣货储位").Subtotals(1) = False
        ActiveSheet.PivotTables("拣货单数据透视表").PivotFields("货品名称").Subtotals(1) = False
        ActiveSheet.PivotTables("拣货单数据透视表").PivotFields("颜色:").Subtotals(1) = False
        ActiveSheet.PivotTables("拣货单数据透视表").RowAxisLayout xlTabularRow
        
        '添加行标签和数值字段(计数、求和)
        With ActiveSheet.PivotTables("拣货单数据透视表").PivotFields("拣货储位")
            .Orientation = xlRowField
            .Position = 1
        End With
        With ActiveSheet.PivotTables("拣货单数据透视表").PivotFields("货品名称")
            .Orientation = xlRowField
            .Position = 2
        End With
        With ActiveSheet.PivotTables("拣货单数据透视表").PivotFields("颜色:")
            .Orientation = xlRowField
            .Position = 3
        End With
        
        ActiveSheet.PivotTables("拣货单数据透视表").AddDataField ActiveSheet.PivotTables( _
            "拣货单数据透视表").PivotFields("拣货单号"), "拣货单数量", xlCount
        ActiveSheet.PivotTables("拣货单数据透视表").AddDataField ActiveSheet.PivotTables("拣货单数据透视表" _
            ).PivotFields("应拣货数量 "), "应拣货总量 ", xlSum
        
        ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\new" & datfile          'ActiveWorkbook.Save
        ActiveWindow.Close
        Windows(thisfile).Activate
        Worksheets("系统参数").Select
        Cells(unit_num, 3) = "成功"

    Next unit_num

    MsgBox "信息处理完毕!", vbOKOnly, "iamlaosong"
    Exit Sub
Err:
    MsgBox "错误#" & Str(Err.Number) & Err.Description & "-位置: " & row1, vbOKOnly + vbExclamation, "iamlaosong"
End Sub

生成的数据透视表如下所示:

时间: 2024-08-28 12:40:07

用VBA创建数据透视表的相关文章

用含有合并单元格的数据创建数据透视表

大家知道,使用含有合并单元格的数据创建数据透视表时,会有空的结果出来,不能达到我们的要求,问题的关键在于被合并的单元格的值是空值,那么,问题来了,怎么把这些被合并的单元格作为有值合并呢,即,虽然被合并,但值还在,只是不显示出来而已,这样创建出的数据透视表就能得到正确的结果了. 上图: 操作: 0.原始含合并单格格的值为"原始"部分: 1.将0的部分使用格式刷刷至①处保留: 2.将"原始"部分取消合并单元格,并填充为正常的值: ※ 如果数据量较大,可以参考这个方法进行

创建数据透视表数据包含合并单元格

我们都知道,含合并单元格格当数据创建数据透视表,结果会出来空,我们不能满足我们的要求,关键的问题是,合并的单元格的值它是空的值,然后,现在的问题是,如何将这些结合单位格作为有值它合并,那,尽管被合并,但值还在,仅仅是不显示出来而已,这样创建出的数据透视表就能得到正确的结果了. 上图: 操作: 0.原始含合并单格格的值为"原始"部分: 1.将0的部分使用格式刷刷至①处保留: 2.将"原始"部分取消合并单元格,并填充为正常的值. ※ 假设数据量较大,能够參考这种方法进行

【Excle数据透视】二维数据如何创建数据透视表

二维数据在创建数据透视表的时候,可能会给你带来一些麻烦,没法创建,会丢失维度,那怎么办呢? 解决办法:使用数据透视表和数据透视图向导即可创建 步骤1 按下[Alt+D+P],出现如下界面 选择上图中的"多重合并计算数据区域"→下一步 创建单页字段→下一步 选定区域A:A15→添加→下一步 单击完成 数据透视表已经创建完成.二维数据透视表与一维数据透视表在于"行合计" 注意:我上图的数据透视是使用默认计数,所以全部都是1,这个可以根据自己的需求进行调整.

LibreOffice创建数据透视表

LibreOffice创建数据透视表 LibreOffice: 选中数据,Data->Pivot Table->Create,拖拽行.列到Row和column,Data Filed要点击Option修改为Count Excel: 选中数据,数据->数据透视表,拖动字段到不同区域,数值区域的默认字段类型是"计数",不需要更改 原文地址:https://www.cnblogs.com/timxgb/p/9094016.html

【Excel 2013 数据透视表 学习】一、创建数据透视表

1 数据透视表 是Excel中数据处理分析工具. 用途: 1. 快速分类汇总.比较大量数据. 2. 快速变化统计分析维度查看统计结果. 数据透视表不仅综合了数据排序.筛选.组合及分类汇总等数据分析方法的优点,而且汇总的方式更灵活多变,并以不同方式显示数据.移动字段所处位置即可变换出各种报表. 2 数据透视表的数据源 4种类型的数据源创建数据透视表: 1. Excel数据列表清单(sheet工作表) 2. 外部数据源 (1) 文本 (2) SQL Server (3) Microsoft Acce

excel2013做数据透视表

excel2013做数据透视表 Excel最新版更新到2013,相比2003.2007和2010,2013的excel界面方面有一定变化,在操作方面也有一定的便捷性.那么如何使用excel2013做一些简单的数据汇总.透视,以及在数据透视表中进行计算.展现等呢,请大家跟着我一起来一起操作吧. 1 首先打开你要用来做数据透视表的excel文件,如图我自己弄了一个样本示例文件,预先选择好你要做数据透视的区域,如我的示例文件我选择A1:F24区域,记得要连带表头一起选择. 2 然后点击最顶端的菜单"插

ASP.NET实现类似Excel的数据透视表

代码: /Files/zhuqil/Pivot.zip 数据透视表提供的数据三维视图效果,在Microsoft Excel能创建数据透视表,但是,它并不会总是很方便使用Excel.您可能希望在Web应用程序中创建一个数据透视报表.创建一个简单的数据透视表可能是一件非常复杂的任务.所以,我打算不但为你提供一个非常有用的工具创建简单和高级的数据透视表,而且为你移除一些笼罩他们的神秘面纱. 目标是:我们想要有能力将datatable中的二维的数据转换成三维视图. 在大多数情况下,你会从数据库的查询数据

六、数据透视表

一.数据透视表 1.创建数据透视表 插入--数据透视表,选择确定.如果文件格式是[xls],那么创建的透视表是老版的(跟Excel2003的一样),文件格式是[xlsx],那么创建的透视表是新版的. 把新版设置成老版的透视表:右键透视表--数据透视表选项--显示--经典数据透视表格局 数据透视表有四个区域:报表筛选.列标签.行标签.数值 2.更改数据透视表汇总方式 双击[求和项:??],进行[值字段设置],更改汇总方式 在行标签也可以进行[字段设置],能更改[分类汇总] 3.汇总多列数据 汇总多

EXCEL 2010学习笔记 —— 数据透视表

今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3.更改数据透视表的组合 4.汇总多列数据,进行数据的分别统计 5.在透视表中利用公式进行计算 6.利用筛选字段创建多个工作表 1.创建数据透视表 从基本的操作层面来说:在获得了数据源之后,可以通过简单的插入功能和拖动命令生成一份数据透视表.创建一个新表格的时候,首先要确定最后的表格的行,列分别记录什么