利用Excel-Vba进行多表汇总和数据透视表
汇总表格式

详情表格式

要求根据汇总表中的信息,到详情表中查找详细物料的具体个数
最终,对物料的个数进行汇总,结果如下图:

ExcelVba代码如下(有一些注释代码供参考)
Sub Start()
Sheet1.UsedRange.Clear '定义结果数组
Dim detail '计算过程中屏幕不刷新
Application.ScreenUpdating = False
'm表示当前detail数组中已有的元素个数
m =
'定义一个大数组,用于放置结果
ReDim detail( To , To )
'结果的表头
detail(, ) = "物料代码"
detail(, ) = "数量"
'当前工作簿所在地址
p = ThisWorkbook.Path & "\"
'打开汇总表
Set sumsheet = GetObject(p & "汇总.xlsx").Sheets()
'获取汇总表中的内容
rng = sumsheet.UsedRange
'对汇总表中的内容,从第二行开始循环
For i = To UBound(rng)
'获取详细表的名称
fileName = rng(i, ) & ".xls"
'获取板卡数量
bandCount = rng(i, )
'获取详细信息的excel对象
Set excelobj = GetObject(p & fileName)
'获取详细信息所在的sheet
Set sdetail = excelobj.Sheets()
'获取sheet中数据
arr = sdetail.UsedRange
'释放excel
Set excelobj = Nothing
'对于每一条详细信息做循环,j=1是表头
For j = To UBound(arr) '在已有的数据中找到重复项
For k = To m
'如果结果中存在相同项
If detail(k, ) = arr(j, ) Then
'对数量进行求和
detail(k, ) = detail(k, ) + arr(j, ) * bandCount
'进入下一次循环
GoTo n
End If Next
'm表示当前detail数组中已有的元素个数
m = m +
'累计detail用m
'取物料代码
detail(m, ) = arr(j, )
'计算物料数量
detail(m, ) = arr(j, ) * bandCount 'goto 跳出本次循环
n:
Next Next
' 循环遍历文件
' Do While f <> ""
' If f <> ThisWorkbook.Name Then
' n = n + 1
' Set sht = GetObject(p & f).Sheets(1)
' Arr = sht.UsedRange
' Workbooks(f).Close False
' For i = 1 To UBound(Arr)
' m = m + 1
' brr(m, 1) = f
' For j = 2 To r
' brr(m, j) = Arr(i, j - 1)
' Next
' Next
' End If
' f = Dir
' Loop Set sumsheet = Nothing
With Sheet1
.[a1].Resize(m, UBound(detail, )) = detail
End With ' Range("A2").Select
' ActiveWindow.ScrollRow = 1
' 'Sheets.Add
' ActiveWorkbook.PivotCache.CreatePivotTable TableDestination:="Sheet2!R3C1", TableName:="数据透视表3", DefaultVersion:=1
' Range("A3").Activate
' ActiveSheet.PivotTable.AddDataField Field:=ActiveSheet.PivotTable.PivotField
' With ActiveSheet.PivotTable.PivotField
' .Orientation = xlRowField
' .Position = 1
' End With ' Call BuildPivotTable
Application.ScreenUpdating = True
End Sub '创建数据透视表
Sub BuildPivotTable() TableName = "数据透视表5" ActiveWindow.ScrollRow =
'建立透视表缓存数据
Set ptcache = ActiveWorkbook.PivotCaches.Add(SourceType:=xlDatabase, SourceData:=Sheet1.UsedRange)
'建立透视表,TableDestination用于指定 创建表的位置,wps这个参数好像没用,一直都会新建一个表,并以A1单元格为左上角定位
Set pt = ptcache.CreatePivotTable(TableDestination:=Sheet1.Range("D10"), TableName:=TableName, DefaultVersion:=) '将物料代码作为行字段
With ActiveSheet.PivotTables(TableName).PivotFields("物料代码")
.Orientation = xlRowField
.Position =
End With ' With ActiveSheet.PivotTables(TableName).PivotFields("数量")
' .Orientation = xlColumnField
' .Position = 1
' End With '对数据透视表 添加数据字段datafield
ActiveSheet.PivotTables(TableName).AddDataField ActiveSheet.PivotTables(TableName).PivotFields("数量"), "求和:数量", xlSum
End Sub
利用Excel-Vba进行多表汇总和数据透视表的更多相关文章
- 【Excle数据透视】如何创建多条件汇总的数据透视表
创建多条件的数据透视表,源数据如下: 插入数据透视表 根据需求拖拽字段(统计该地区下销售人员销售业绩) 数据透视结果 数据透视表布局的各个区域说明 区域 说明 数值 用于显示汇总值数据 行标签 用于将 ...
- EXCEL 2010学习笔记 —— 数据透视表
今天整理一下EXCEL2010 数据透视表的课程笔记,数据透视表可以对多组数据进行统计和整理,是一种基本的数据可视化工具. 记录6个方面的总结: 1.创建数据透视表 2.更改数据透视表的汇总方式 3. ...
- VBA学习之关于数据透视表的应用
工作中很多地方需要同时处理多个数据表,而且用数据透视表进行排版,排序,计算字段,一个一个的做非常累,这里给出批量处理的方法. 学习VBA之前最好懂一点点VB的基础知识,因为里面的很多语法问题都是由VB ...
- C# 操作Excel数据透视表
一.概述 数据透视表(Pivot Table)是一种交互式的表,可以进行某些计算,如求和与计数等,可动态地改变透视表版面布置,也可以重新安排行号.列标和页字段.当改变版面布置时,数据透视表也会按照新的 ...
- 使用excel 数据透视表画图
① 打开Excel,选中需要制表的数据,点击“插入”->“数据透视表” ② 出现下列对话框,点击“确定” ③ 再新的“sheet”表内对“数 ...
- 妙用Excel数据透视表和透视图向导,将二维数据转换为一维数据
项目中,每年都会有各种经销商的各种产品目标数据导入,经销商和产品过多,手工操作过于单调和复杂.那有没有一种方式可以将复杂的二维数据转换为一维数据呢? 有,强大的Excel就支持此功能. 常用Excel ...
- Excel2010数据透视表1
“透视”作为一个动词,意思是旋转.如果将数据看成是一个物体,数据透视表允许旋转数据汇总,从不同角度或观点来看它.数据透视表能够轻松地移动字段,交换字段位置,设置创建项目的特定组. 如果给出一个陌生的物 ...
- 小白学 Python 数据分析(12):Pandas (十一)数据透视表(pivot_table)
人生苦短,我用 Python 前文传送门: 小白学 Python 数据分析(1):数据分析基础 小白学 Python 数据分析(2):Pandas (一)概述 小白学 Python 数据分析(3):P ...
- 【Excle数据透视表】如何创建非共享缓存的数据透视表
一般情况下,利用同一个数据源创建多个数据表时,默认创建的是共享缓存的数据透视表.刷新一个数据透视表时会影响其他数据透视表的展示结果. 解决方案 创建非共享缓存的多个数据透视表 步骤一 单击工作表数据任 ...
随机推荐
- Mac 下eclipse安装Lombok插件
在官网下载最新版本的 JAR 包. 将 lombok.jar 放在eclipse安装目录下,和 eclipse.ini 文件平级的. 注意,mac操作系统下eclipse的安装路径下有两个eclips ...
- js var 以及 let 的差异
例子 window.checklist=[{"boardname":"motor_board","cur":"1.0.0" ...
- winform使用log4.net
因为我最近负责的Winform项目,好多都用到了这个log4net的日志功能,开发程序对数据一般都要求做到雁过留痕,所以日志对于我们程序员是不可或缺.因此我把对log4net的使用做一个记录总结,以便 ...
- 高阶函数 map、reduce、filter、sort 函数计算
map() 循环遍历,返回一个新数组 ,reduce()把结果继续和序列的下一个元素做累积计算 把一个字符串13579先变成Array--[1, 3, 5, 7, 9],再利用reduce()就可以写 ...
- java代理通俗简单解析
1 代理 1.1 代理的概念和作用 代理的概念很好理解,就像黄牛代替票务公司给你提供票,经纪人代理艺人和别人谈合作.Java的代理是指实现类作为代理类的属性对象, ...
- MySQL 8 配置文件
包括功能: 端口,是否启用bin log , 指定目录, InnoDB是否启用压缩,MySQL使用旧的密码验证方式. 说明,建表的时候要添加必要的参数才会启用表数据压缩存储,以下为例: CREATE ...
- newcoder-最长树链-树/gcd
https://ac.nowcoder.com/acm/problem/13233 链接:https://ac.nowcoder.com/acm/problem/13233来源:牛客网 题目描述 树链 ...
- 织梦默认编辑器换成kindEditor实操教程
织梦默认编辑是CKeditor,要想换成kindEditor编辑器,按如下步骤操作. 先看效果图: 首先下载打包好的 kindEditor_for_dedeCMS.ZIP,下载地址:https://d ...
- javascript高级程序设计第3版——第7章 函数表达式
此张内容的难点在于闭包.而闭包又涉及到原型,原型链,执行上下环境,this的取值等知识点.(此章节对于闭包的内容篇幅较少,且写的很是艰涩难懂,推荐一位大牛的博客,对于闭包的前因后果以及作用机制写的很明 ...
- js的短路
短路问题经常是发生在逻辑运算符中的逻辑与(&&).逻辑或(||) 1.逻辑或(||) 他是一真则真,当逻辑或前面的表达式结果为1或true时,逻辑或后面的表达式是不会执行的 2.逻辑与 ...