鱼C论坛

 找回密码
 立即注册
查看: 3473|回复: 20

关于EXCEL表格合并的一些问题,需要大佬伸出一下援手!!~

[复制链接]
发表于 2019-12-12 15:07:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 Kii77 于 2019-12-12 15:14 编辑

这应该算是数据整理的一种操作思路吧。
对需求举个例子吧,我有一个表格模板分发去给别人填报,填写完成之后,我需要把每张表格的数据加总在一起。这个加总的方式,假设表格1、表格2、表格3,合并成表格4,而需要填写数据的单元格为A1,那我想合并出来的表格4的A1=表格1!A1+表格2!A1+表格3!A1。
如果需要合并的表格数量一定,那设置excel的公式就可以解决,但是所需要合并表格的数量不是一定的,所以我想做到将同一个文件夹内的所有excel,通过上文的方式,将填写数字的单元格合并,所需要合并的数据是精确到小数点后2位的浮点数,而合并过程不改变填写文本的单元格,然后输出到一个同样格式的excel文件里。
有没有大佬提供个编写思路供我参考一下~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2019-12-12 15:15:05 | 显示全部楼层
这不需要编程吧,直接在excel操作就行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-12 15:18:46 | 显示全部楼层
冬雪雪冬 发表于 2019-12-12 15:15
这不需要编程吧,直接在excel操作就行。

表格太过于庞大,每个文件十几个工作表,每个表格几百个数据,而且交上来的数据还一直在改。。直接在excel改太恶心了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-12 15:19:52 | 显示全部楼层
用VBA实理要简单些
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-12 15:21:01 | 显示全部楼层
emlsglt21 发表于 2019-12-12 15:19
用VBA实理要简单些

可是这个论坛我没找着VBA的版块,而且对VBA的了解太浅了。。总感觉没地方学
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-12 15:24:10 | 显示全部楼层
相当于xls文件的数量不固定
但是每个xls的行、列 固定??
然后大汇总为一个xls ??? 但是原始表都不变???

也许vba 比python 要容易些
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-12 15:32:16 | 显示全部楼层
wp231957 发表于 2019-12-12 15:24
相当于xls文件的数量不固定
但是每个xls的行、列 固定??
然后大汇总为一个xls ??? 但是原始表都不变 ...

是的,就是固定表格,表格数量不固定,然后全部合并在一个汇总表格里。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-12 15:32:50 | 显示全部楼层
wp231957 发表于 2019-12-12 15:24
相当于xls文件的数量不固定
但是每个xls的行、列 固定??
然后大汇总为一个xls ??? 但是原始表都不变 ...

vba会不会很难学啊...
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-12 15:42:11 | 显示全部楼层
我有VBA的书电子的,要的话留邮箱
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-12 15:47:06 | 显示全部楼层
Kii77 发表于 2019-12-12 15:32
vba会不会很难学啊...


方便的话  打包2个xls 放出来,帮你研究研究  
要是不方便  就只能你自己+度娘
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-12 16:41:48 | 显示全部楼层
用pandas吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 06:48:10 | 显示全部楼层
本帖最后由 倒戈卸甲 于 2019-12-13 07:13 编辑

这个问题在VBA实在过于简单 ,入门级的问题,但如果你没接触过VBA,我要讲的东西太多了。https://fishc.com.cn/thread-150574-1-1.html 这是之前我回答另一个鱼油的答案,你先试试手坐标6楼,第33行到56行能让你交互式的选择文件夹并通过按住Ctrl键选择多个文件,将多个工作簿变为一个工作簿的若干子表。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 06:58:10 | 显示全部楼层
  1. Sub 基本操作1()
  2. Dim str As String
  3. Dim wb As Workbook

  4. str = Dir("d:\data\*.xls*")

  5. For i = 1 To 100
  6.     Set wb = Workbooks.Open("d:\data" & str)
  7.    
  8.     wb.Sheets(1).Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
  9.     ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0)
  10.    
  11.     wb.Close
  12.     str = Dir
  13.     If str = "" Then
  14.         Exit For
  15.     End If
  16. Next
  17. End Sub
复制代码

这个函数则是基本操作,使用时把d:\data\替换为你的目标文件夹,该文件夹下的excel文件会被提取到同一文件中。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 07:03:16 | 显示全部楼层
  1. Sub wjhb()
  2. Dim str As String
  3. Dim wb As Workbook
  4. Dim sht As Worksheet

  5. str = Dir("d:\data\*.xls*")

  6. For i = 1 To 100
  7.     Set wb = Workbooks.Open("d:\data" & str)
  8.     For Each sht In wb.Sheets
  9.         sht.Copy after:=ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count)
  10.         ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count).Name = Split(wb.Name, ".")(0) & sht.Name
  11.     Next
  12.     wb.Close
  13.     str = Dir
  14.     If str = "" Then
  15.         Exit For
  16.     End If
  17. Next
  18. End Sub
复制代码


这个函数稍微健壮一点,允许你每个excel文件有多个工作表。。。。使用时仍是把d:\data\替换为你的目标文件夹。其中基础原理我在链接的那个帖子里讲过你可以看一下
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 07:08:11 | 显示全部楼层
本帖最后由 倒戈卸甲 于 2019-12-13 07:16 编辑

不对,是必须读。我链接的那个帖子你必须通读,并且每个函数都运行一下,不然很可能就哪里出问题了。要节约你我的时间。如果你顺利将所有文件数据抓到同一个文件中,你距离你的目标只有30%的距离,剩下就几行代码。。。我先不敲了,万一你前面的步骤都搞不定
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 07:37:20 From FishC Mobile | 显示全部楼层
你把模版发上来,用pandas就可以根据模版写个python 程序实现了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-13 09:54:24 | 显示全部楼层
emlsglt21 发表于 2019-12-12 15:42
我有VBA的书电子的,要的话留邮箱

529457249@qq.com 麻烦大佬发一份啦~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-12-13 09:56:14 | 显示全部楼层
倒戈卸甲 发表于 2019-12-13 07:08
不对,是必须读。我链接的那个帖子你必须通读,并且每个函数都运行一下,不然很可能就哪里出问题了。要节约 ...

woc 让我赶紧拜读一下...先研究一下这个是什么思路
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2019-12-13 10:43:50 | 显示全部楼层
本帖最后由 倒戈卸甲 于 2019-12-13 10:47 编辑
  1. Sub 单列求和()

  2. Dim sht As Worksheet
  3. Dim i, j, k As Integer
  4. k = Sheet1.Range("a65536").End(xlUp).Row    '制式写法,获取你的数据有多少行。有需要的话可以自己赋值,比如k=88,处理到第88行

  5. For j = 2 To k      '如果设置j=3会从第三行开始处理,j=1会从第一行开始处理。一直处理到数据最后一行

  6.     For i = 2 To Sheets.Count

  7.     Sheet1.Range("a" & j) = Sheet1.Range("a" & j) + Sheets(i).Range("a" & j) '核心语句,求和,b代表第b列,换成c则会处理第c列

  8.     Next
  9. Next

  10. End Sub

  11. Sub 求和2() '怕你想不到,所有写出来让你看看,把整个for-next语句段copy粘贴几遍,并分别改动b为a/c/e/f就可以处理多列乃至整个工作表了,用不着
  12.             '绞尽脑汁去想一个在列上的循环嵌套

  13. Dim sht As Worksheet
  14. Dim i, j, k As Integer
  15. k = Sheet1.Range("a65536").End(xlUp).Row
  16. For j = 2 To k
  17.     For i = 2 To Sheets.Count

  18.     Sheet1.Range("a" & j) = Sheet1.Range("a" & j) + Sheets(i).Range("a" & j)
  19.     Next
  20. Next

  21. For j = 2 To k
  22.     For i = 2 To Sheets.Count

  23.     Sheet1.Range("b" & j) = Sheet1.Range("b" & j) + Sheets(i).Range("b" & j)

  24.     Next
  25. Next

  26. End Sub
复制代码


算了,我后面这几天可能没空,就不循序渐进循循善诱了。你完成多文件合并后,要达成你的目标的话,剩下的代码也先给你了。绝对不难,用点心思就可以掌握。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2019-12-13 12:51:17 | 显示全部楼层
excel 插入 数据透视表
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-12-6 08:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表