利用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数据透视表】如何创建非共享缓存的数据透视表
一般情况下,利用同一个数据源创建多个数据表时,默认创建的是共享缓存的数据透视表.刷新一个数据透视表时会影响其他数据透视表的展示结果. 解决方案 创建非共享缓存的多个数据透视表 步骤一 单击工作表数据任 ...
随机推荐
- linux下的启停脚本
linux下的根据项目名称,进行进程的启停脚本 #!/bin/bash JAVA=/usr/bin/java APP_HOME=/opt/program/qa/wechat APP_NAME=prog ...
- Qt中隐藏滚动条重新实现鼠标滚轮事件wheelEvent
delta()已经被弃用了,QT5中用的是angleDelta(),计算的时候取angleDelta().y()值. #重载方法wheelEvent(self,event),即滚轮事件方法 #---- ...
- C#通过DocX创建word
网上有一些基础的东西,但是比如插入图片,就没有找到方案,最终自己摸索出来的. 1.首先通过Nuget获取引用,关键字:“DocX” 2.示例代码 class Program { static void ...
- storybook配置之基本配置和webpack配置
默认配置 Storybook有一个默认的适合(suits)大型项目开发的webpack配置,假如你使用react app,他类似于创建一个react app的配置,并经过调整(tweaked ),使其 ...
- 【转载】Jmeter 性能测试入门
[转载]Jmeter性能测试 入门 Jmeter是一款优秀的开源测试工具, 是每个资深测试工程师,必须掌握的测试工具,熟练使用Jmeter能大大提高工作效率. 熟练使用Jmeter后, 能用Jmete ...
- Petrozavodsk Winter Camp, Day 8, 2014, Fine Brochures
1的个数-块的个数+多减的个数+flag 多减的只会在一个循环末尾出现 #include <bits/stdc++.h> using namespace std; #define rep( ...
- 超简DbHelper
using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Dynamic; n ...
- python网络爬虫&&爬取图片
爬取学院官网数据from urllib.request import * #导入所有request urllib文件夹,request只是里面的一个模块from lxml import etree # ...
- JAVA写接口傻瓜(!)教程(二)
接上一篇 3.数据库SQL sever配置 理论上来说,java web项目连接什么数据库都行,但是我电脑上SQL sever用了三年了,各种操作都比较熟悉,所以也懒得再用My SQL.想用My SQ ...
- io.undertow.websockets.jsr.ServerWebSocketContainer cannot be cast to org.apache.tomcat.websocket.server.WsServerContainer
Caused by: java.lang.ClassCastException: io.undertow.websockets.jsr.ServerWebSocketContainer cannot ...