精华内容
下载资源
问答
  • 多个excel工作簿合并求和
    千次阅读
    2021-12-05 11:44:53

    因为有人询问合并计算,对VBA略知一些,我就写了一点,有需要的人可以借鉴。

    新建一个工作表,粘贴到模块,F5运行,就可以达到左列合计,左列为一列。

    下面是代码:

    无源数据格式

    Sub 多工作簿合计()
    Application.ScreenUpdating = False
    Dim Wb As Workbook, vrtSelectedItem As Variant, Mysheet As Worksheet, CellAddress
    Dim ShRan As String, Arr() As String, s As Long, Spt, NewPath As String, Bool As Boolean
    On Error Resume Next '遇到错误继续执行
    With Application.FileDialog(msoFileDialogFilePicker)
       .AllowMultiSelect = True
       '多选
      .InitialFileName = ThisWorkbook.Path & "\"
      '默认路径
      .Title = "选择文件"
      '窗口标题
      .Filters.Clear
       '清除文件过滤器
      .Filters.Add "全部文件", "*.*"
      .Filters.Add "Excel文件", "*.xlsm"
      .Filters.Add "Excel文件", "*.xls"
      .Filters.Add "Excel文件", "*.xlsx;*.xls"
       '设置文件过滤器,可以指定多个扩展名,每个扩展名都必须用分号分隔。 例如,可以将参数分配给字符串:".txt;.htm"。
      Cells.Clear
      Bool = True
      If .Show = -1 Then
        For Each vrtSelectedItem In .SelectedItems
          Spt = Split(vrtSelectedItem, "\")
          NewPath = "'" & Replace(vrtSelectedItem, Spt(UBound(Spt)), "[" & Spt(UBound(Spt)) & "]")
          Set Wb = Workbooks.Open(vrtSelectedItem)
          For Each Mysheet In Wb.Worksheets
            '复制标题行,不带格式粘贴
            If Bool Then
              Mysheet.Rows("1:1").Copy
              Cells(1, 1).PasteSpecial Paste:=xlPasteValues
              Bool = False
              Application.CutCopyMode = False
            End If
            ReDim Preserve Arr(s)
            '获取不包含首行的当前区域
            CellAddress = Split(Mysheet.Cells(2, 1).CurrentRegion.Address, ":")
            ShRan = Mysheet.Name & "'!" & Mysheet.Range("A2:" & CellAddress(1)).Address(ReferenceStyle:=xlR1C1) '数据区域
            Arr(s) = NewPath & ShRan
            s = s + 1
          Next Mysheet
          Wb.Close
        Next vrtSelectedItem
        Set Wb = Nothing
      End If
    End With
    Range("A2").Consolidate Sources:=Arr, Function:=xlSum, TopRow:=False, LeftColumn:=True, CreateLinks:=False
    Application.ScreenUpdating = True
    End Sub
    

    下面是有源数据格式的

    Sub 汇总合计() '保留源数据格式
    Application.ScreenUpdating = False
    Dim Wb As Workbook, vrtSelectedItem, Mysheet As Worksheet, i As Long, Bool As Boolean, Start_row
    'On Error Resume Next '容错
    With Application.FileDialog(msoFileDialogFilePicker)
      .AllowMultiSelect = True
       '多选
      .InitialFileName = ThisWorkbook.Path & "\"
      '默认路径
      .Title = "选择文件"
      '窗口标题
      .Filters.Clear
       '清除文件过滤器
      .Filters.Add "全部文件", "*.*"
      .Filters.Add "Excel文件", "*.xlsx;*.xls" '可以指定多个扩展名,每个扩展名都必须用分号分隔。 例如,可以将参数分配给字符串:".txt;.htm"。
      .Filters.Add "Excel文件", "*.xlsm"
      .Filters.Add "Excel文件", "*.xls"
      '设置文件过滤器
      
      Cells.Clear
      Bool = True
      If .Show = -1 Then
        For Each vrtSelectedItem In .SelectedItems
          Set Wb = Workbooks.Open(vrtSelectedItem)
          With ThisWorkbook.ActiveSheet
            For Each Mysheet In Wb.Worksheets
              If Bool = True Then Start_row = 1 Else Start_row = 2: Bool = False
              '获取不包含首行的当前区域
              CellAddress = Split(Mysheet.Cells(1, 1).CurrentRegion.Address, ":")
              Mysheet.Range("A" & Start_row & ":" & CellAddress(1)).Copy .Cells(i + 1, 1)
              
              i = Mysheet.Range("A1").CurrentRegion.Rows.Count
            Next
          End With
          Wb.Close
        Next
        Set Wb = Nothing
      End If
    End With
    
    Dim RowCount As Long, MyRange As String, ColCount As Long, DataCol As Long, E_Coords, Act_sh
    
    With ThisWorkbook.ActiveSheet
        RowCount = .Cells(Rows.Count, 2).End(xlUp).Row
        ColCount = .Cells(1, 1).CurrentRegion.Columns.Count
        Act_sh = .Cells(1, 1).CurrentRegion.Address
        .Range(Act_sh).Copy
            With .Cells(1, ColCount + 1)
               .PasteSpecial Paste:=xlPasteColumnWidths
               .PasteSpecial Paste:=xlPasteFormats
            End With
        Application.CutCopyMode = False
        E_Coords = Split(Act_sh, ":")(1)
        MyRange = ActiveSheet.Name & "!" & .Range("A2:" & E_Coords).Address(ReferenceStyle:=xlR1C1)
        .Cells(2, ColCount + 1).Consolidate Sources:=MyRange, _
                Function:=xlSum, TopRow:=False, LeftColumn:=True, CreateLinks:=False
                
        .Range("A2:" & E_Coords).Delete Shift:=xlToLeft
      
        .Range(Range("A1").CurrentRegion.Rows.Count + 1 & ":" & .Cells.Rows.Count).ClearFormats
    End With
    Application.ScreenUpdating = True
    End Sub

    更多相关内容
  • 主要为大家详细介绍了Python将多个excel文件合并为一个文件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 能把多个Excel文件合并到一个文件里,注意所有文件格式需要一样,文档里含有合并脚本,直接复制、粘贴到说明的地方,执行即可。简单好用,本人每次仓库大盘点都用此法。
  • # 一、工作表计数 # 二、从多个工作表中连接(concat)数据 # 三、批量计算工作簿工作表总数和均值

    一、工作表计数

    二、从多个工作表中连接(concat)数据

    三、批量计算工作簿和工作表总数和均值



    原数据下载




    一、工作表计数

    计算当前目录下所有的 excel 数量,并显示 sheet row colum 等详细信息

    注意 高版本的 xlrd 不支持 .xlsx 格式。会报错 xlrd.biffh.XLRDError: Excel xlsx file; not supported

    os.path.basename(input_file) 文件名
    workbook.nsheets 一个工作簿中 sheet 数量
    worksheet.nrows 一个 sheet 中 总行数
    worksheet.ncols 一个 sheet 中 总列数

    import glob
    import os
    from xlrd import open_workbook
    
    input_directory = "E:\work\code\excel"
    
    workbook_counter = 0
    for input_file in glob.glob(os.path.join(input_directory, '*.xls')):
    	print(input_file)
    	workbook = open_workbook(input_file)
    	print('Workbook: {}'.format(os.path.basename(input_file)))
    	print('Number of worksheets: {}'.format(workbook.nsheets))
    	for worksheet in workbook.sheets():
    		print('Worksheet name:', worksheet.name, '\tRows:',\
    				worksheet.nrows, '\tColumns:', worksheet.ncols)
    	workbook_counter += 1
    print('Number of Excel workbooks: {}'.format(workbook_counter))
    
    

    在这里插入图片描述





    二、合并(concat)多个工作表中的数据

    将多个工作簿中的多个 sheet 文件合并,主要用到 appendconcat

    第一层循环 遍历所有的工作簿 all_workbooks。

    第二层循环 遍历每个工作簿中的 all_worksheets

    axis=0 表示将数据垂直拼接起来,axis=1 表示将数据平行拼接起来。

    merge 如果想要根据某个关键字拼接数据,可以用 merge。

    import pandas as pd
    import glob
    import os
    
    input_path = "E:\work"
    output_file = "E:\work\output_file.xlsx"
    
    all_workbooks = glob.glob(os.path.join(input_path,'*.xls*'))
    data_frames = []
    # 第一层循环
    for workbook in all_workbooks:
    	all_worksheets = pd.read_excel(workbook, sheet_name=None, index_col=None)
    	# 第二次循环
    	for worksheet_name, data in all_worksheets.items():
    		data_frames.append(data)
    all_data_concatenated = pd.concat(data_frames, axis=0, ignore_index=True)
    
    writer = pd.ExcelWriter(output_file)
    all_data_concatenated.to_excel(writer, sheet_name='all_data_all_workbooks', index=False)
    writer.save()
    




    三、批量计算工作簿和工作表总数和均值

    每个 workbook 工作簿 的总数,平均值。
    每个 worksheet 表 的总数,平均值。

    pd.Series(total_sales / number_of_sales) 总销售额 除以 总数量 的时候,格式会发送变化,需要用 pd.Series 转换

    在这里插入图片描述

    #!/usr/bin/env python3
    import pandas as pd
    import glob
    import os
    
    input_path = "E:\work"
    output_file = "E:\work\output_file.xlsx"
    
    all_workbooks = glob.glob(os.path.join(input_path, '*.xls*'))
    data_frames = []
    
    # 第一层遍历,获取到虽有的工作簿 workbook
    for workbook in all_workbooks:
        all_worksheets = pd.read_excel(workbook, sheet_name=None, index_col=None)
    
        # 需要统计的数据项
        workbook_total_sales = []
        workbook_number_of_sales = []
        worksheet_data_frames = []
        worksheets_data_frame = None
        workbook_data_frame = None
    
        # 遍历一个工作簿中的所有 worksheet
        for worksheet_name, sheet_data in all_worksheets.items():
            # 获取销售总额, 保活替换空格 美元符号等
            total_sales = pd.DataFrame([float(str(value).strip('$').replace(',', '')) for value in sheet_data.loc[:, 'Sale Amount']]).sum()
            # 用 len() 函数 求出数量
            number_of_sales = len(sheet_data.loc[:, 'Sale Amount'])
            # 计算出 一个 worksheet 的平均值,这里需要用 Series 转换数据格式
            average_sales = pd.Series(total_sales / number_of_sales)
    
            # 将每个 worksheet 的销售总额 和销售量 记录,然后在 内层 for 循环结束后 求和,就得到单个 workbook 的总和
            workbook_total_sales.append(total_sales)
            workbook_number_of_sales.append(number_of_sales)
    
            data = {'workbook': os.path.basename(workbook),
                    'worksheet': worksheet_name,
                    'worksheet_total': total_sales,
                    'worksheet_average': average_sales}
    
            worksheet_data_frames.append(
                pd.DataFrame(data, columns=['workbook', 'worksheet', 'worksheet_total', 'worksheet_average']))
        worksheets_data_frame = pd.concat(worksheet_data_frames, axis=0, ignore_index=True)
        # 求和,就得到单个 workbook 的总和
        workbook_total = pd.DataFrame(workbook_total_sales).sum()
        workbook_total_number_of_sales = pd.DataFrame(workbook_number_of_sales).sum()
        # 除以 workbook 的总数 得一个工作簿的平均值
        workbook_average = pd.Series(workbook_total / workbook_total_number_of_sales)
    
        workbook_stats = {'workbook': os.path.basename(workbook),
                          'workbook_total': workbook_total,
                          'workbook_average': workbook_average}
    
        workbook_stats = pd.DataFrame(workbook_stats, columns=['workbook', 'workbook_total', 'workbook_average'])
        # 左连接 'workbook' 相当于连接key
        workbook_data_frame = pd.merge(worksheets_data_frame, workbook_stats, on='workbook', how='left')
        data_frames.append(workbook_data_frame)
    
    all_data_concatenated = pd.concat(data_frames, axis=0, ignore_index=True)
    
    writer = pd.ExcelWriter(output_file)
    all_data_concatenated.to_excel(writer, sheet_name='sums_and_averages', index=False)
    writer.save()
    
    
    展开全文
  • Excel用SQL合并多个工作表

    千次阅读 2021-04-07 09:08:35
    作者:iamlaosong 需求是统计全省各地市全年12月的...其实可以用SQL语句合并12各月份的数据(没有数据的月份做带表头的空),然后对这个合并数据透视统计就可以了。这样每次数据变动时,只要刷新一

    作者:iamlaosong

    需求是统计全省各地市全年12个月的累计销售情况,原始数据是每个月一张明细表。简单的做法是合并12个月数据,做一个数据透视表就完成了。但同事不想合并12个月数据,因为那样每次数据变动都要合并一次。后来的做法是每个月做一个数据透视表(做好一个月后复制一份,改下数据源就可以完成另一个月)。然后再将已有月份的数据透视表中的数据求和。

    其实可以用SQL语句合并12各月份的数据(没有数据的月份做个带表头的空表),然后对这个合并的表做个数据透视表统计就可以了。这样每次数据变动时,只要刷新一下这个合并的表格和数据透视表就可以完成统计了。具体方法如下:

    1、菜单“数据”-“现有连接” ;
    2、在连接面板中,点击“浏览更多”,选择要统计的数据源文件;
    3、在选择表格面板中,勾选“数据首行包含列标题”,点击“确定” ;


    4、在导入数据面板中,选择导入数据的形式:表、数据透视表还是直接生成透视图,我们选择“表”

    关于数据存放位置,如果已经插入了空表,数据存放点放在现有工作表,否则,选择“新工作表”,最后点击“属性”;


    5、在连接属性的定义面板中,在命令文本框中输入SQL语句:
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年1月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年2月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年3月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年4月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年5月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年6月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年7月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年8月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年9月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年10月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年11月$] union 
    select [揽收城市_Pickup city],[应付总计_Total charge_] from [2020年12月$] 

    注意:只需取所需的字段即可,这样可以防止因表头差异造成无法合并。除非肯定所有表头都一致,才可以用“*”代替所有字段。

    字段名中如果存在回车换行,用下划线代替,如字段 [揽收城市_Pickup city],就是下图中的字段名:

    6、如果有数据变动,右击表格中的数据,点击弹出菜单中的“刷新”即可。

    展开全文
  • 多个Excel表合并计算.doc
  • 如何用vbs来合并多个excel文件在存放文件的目录之外打开一个空的Excel文档 运行下面分宏:(注意文件目录) Sub cfl() Dim fs, f, f1, fc, s, x Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs....

    如何用vbs来合并多个excel文件

    在存放文件的目录之外打开一个空的Excel文档 运行下面分宏:(注意文件目录) Sub cfl() Dim fs, f, f1, fc, s, x Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder("e:\test\") '存放文件的目录 Set fc = f.Files Fo

    如何用vbs来合并多个excel文件?

    679d98cb0b2ea69b80d50a4ff7e80eb7.png

    在同一个文件夹中有很多个excel文件,文件的列数相同,格式也一样,每个在存放文件的目录之外打开一个空的Excel文档 运行下面分宏:(注意文件目录) Sub cfl() Dim fs, f, f1, fc, s, x Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder("e:\test\") '存放文件的目录 Set fc = f.Files Fo

    以WPS 2019版本为例: 如需合并多个excel文件,可使用WPS2019中已自带的「文档拆分合并」功能: 操作步骤: 1)打开其中一份「表格(Excel)」文档; 2)点击「特色应用-拆分合并-合并」; 3)点击添加需合并文件。

    vbs如何打开多个xls文件,并变成一个文件下的工作表?

    例如同一目录下有30个xls文件,我要把他们打开来变成一个文件的30个工作在D盘建一个“Test”文件夹,并在Test文件夹下面放一个“结果”文件夹,把你要共享的文件拷贝到Test文件夹下,然后打开一个空白Excel文档执行下面的代码。 Sub xlsShare() Dim Axls As String Dim PsDoc As Workbook Dim CurPath, Newpath As String

    请教高手如何用批处理或vbs将打开的多个excel文件以下是打开批量文档后关闭的代码。 Sub Save_Close() On Error Resume Next Application.DisplayAlerts = False Dim i, j As Single For j = 1 To Workbooks.Count For i = 1 To Workbooks.Count If Workbooks(i).Name ThisWorkbook.Name Then W

    VBS批量修改目录下的excel文件指定内容

    vbs将打开的多个excel文件保存后再关闭

    Sub SaveClose()Dim iFor i = Workbooks.Count To 1 Step -1 If Workbooks(i).Name ThisWorkbook.Name Then Workbooks(i).Save: Workbooks(i).Close End IfNextEnd Sub本代码依次保存并关闭所有非本代码所在的打开的工作簿

    VBS合并excel单元格

    以上就是CSS布局HTML为大家整理的如何用vbs来合并多个excel文件?内容,如果觉得本站更新的资源对您有帮助 不要忘记分享给您身边的朋友哦!

    展开全文
  • 在网上找EXCEL多文件合并的方法,思路: 一、Linux 或者window+cmder,直接用命令行cat合并EXCEL文件,但是,需要安装辅助东西才能直接处理(也许也不可以,但是,可以用文件格式转换工具转换是可行的,把EXCEL文件...
  • excel中,经常会遇到多个表格的数据需要汇总,但是有时候每个表格的顺序、项目不一定完全相同,比如下图中,动图一是五个不完全相同的工作表,如何将五个工作表的数据汇总到一个工作表中(图二所示),并对这些数据...
  • 这里有很多表(行列相同指标元素),我们需要把它们合并,汇总起来。 1:选择元素。 2:查看元素。 3:添加进来。 把另外几个表也加进来。 1:把首行选中(需要保留)。 2:最左列选中。 结果输出。 ...
  • 这是一个简单程序,解决多个表格合并到一个表格文件,主要解决的问题:多个Excel xlsx电子表格文件合并到1个表格多个sheet工作表合并到一个工作表一键合并,快速完成合并任务程序在这里:Excel表格表格合并到一个...
  • 1. 使用INDIRECT实现拼接动态引用单元格内容 =INDIRECT("E"&COUNTA(G14:G17)) 2. 使用ctrl+pageUp ,ctrl+pageDown使用键盘快速切换工作簿 3. 多工作表求和=SUM('1日:5日'!...多个excel合并成一个工作簿 ...
  • PowerQuery合并多个工作簿到一张

    千次阅读 2021-03-30 13:41:11
    1.新建一个工作簿,执行“数据”-“新建查询”-“获取数据”-“自文件”-“从文件夹”命令,如下图 2.选择相应的文件夹,点击转换数据。打开POWER QUERY编辑器窗口。 3.保留前两列Content和Name,其余的全部删除。...
  • 多个EXCEL表格求和在EXCEL汇总中点击数据/合并计算,函数选择求和,引用位置选择第1张表,进行添加,再选择第2张表,进行添加,以此类推。根据的样式选择首行、最左列,可二者全选,确定。怎样在EXCEL中做到多个...
  • 小贴士: 1、filename = Dir(path & "\*.xlsx")如果改为` ...Sub all_excel_files() Dim path As String, filename As String Dim w As Workbook, ws As Workbook With Application.FileDialog(msoFileDialogFo
  • 大家好,这次项目给大家带来的是Python实现多个Excel工作簿合并,并对合并后的结果集进行数据透视的示例。对于数据透视,Excel当中已经有了比较强大的透视功能,但是缺点是灵活性不足,就是对于时间频率、周期以及...
  • 合并多个excel表中相同sheet的数据

    千次阅读 2019-11-12 09:09:45
    合并多个excel表中相同sheet的数据欢迎使用Markdown编辑器新的改变合理的创建标题,有助于目录的生成如何改变文本的样式合并多个excel表中相同sheet的数据 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown...
  • excel如何快速把多个工作表合并到一个excel表excel如何快速把多个工作表合并到一个excel表 有这么一种情况,就是我们有很多张excel,而且excel表里面的公式基本一样,我们就想快速的把这些excel合并在一起,意思在...
  • Excel合并计算完成多表格数据汇总求和多表格数据汇总可以使用透视,使用函数,今天读书屋OFFICE网陈飞老师分享一个通过合并计算完成多表格数据汇总方法,合并计算分为两种情况,一种情况是:多个表格类别一致数据...
  • 其实在Excel里面有很花式求和方式,今天小编总结了5种超级实用的求和方式,能够帮助我们快速的将数据汇总在一起!1、Alt+=这是Excel表格里面最常见的求和方式,通常可使用在普通有规律的数据上面,将数据全选然后...
  • 工作中最常用对新手又有些难度的这16个公式,还不快学习,...16个EXCEL必杀公式送给财会人2、同比增长率公式【例16】如下图所示,B列是本年累计,C列是去年同期累计,要求计算同比增长率。E2 =(B2-C2)/IF(C2>0,...
  • 在之前我们是通过ExcelDataReader插件将Excel的内容导入datagridview控件,那今天是将导入的数据从datagridview中导出为Excel。 在导出时需要进行一些特殊的处理。 (一)界面设计 我的界面不是那么美观,哈哈哈,我...
  • 多个Excel表格中的数据汇总合并在一个Excel中,并且显示一致。 因此编写了以下代码来解决这个问题, 1.在Excel中按Alt+F11,快速调出命令控制台 2.工具栏选择插入——模块——将以下脚本代码复制进去,按F5...
  • 老板最近越来越过分了,快下班了发给我几百表格让我把内容合并到一表格内去。 还好我会Python,分分钟就搞定了,这要是换不会Python的,不得加班到第二天天亮去了~ 这么好用的技能,必须分享给大家,话不...
  • 用Python将多个excel表格合并为一个表格

    万次阅读 多人点赞 2016-12-22 14:05:31
    生活中经常会碰到多个excel表格汇总成一个表格的情况,比如你发放了一份表格让班级所有同学填写,而你负责将大家的结果合并成一个。诸如此类的问题有很多。除了人工将所有表格的内容一个一个复制到汇总表格里,但...
  • 1.同一目录下的多工作簿,每个工作簿中有一张或工作表,一键全部汇总 Sub 合并目录所有工作簿全部工作表() Dim MP, MN, AW, Wbn, wn Dim Wb As Workbook Dim i, a, b, d, c, e Application.ScreenUpdating...
  • 本篇文章是从海量excel技巧中,精选出的最贴近实用的技巧,共36个,重新配图配文。希望对同学们能有帮助。(学习更多翻到本文最后...技巧10、单元格中输入00001技巧11、按月填充日期技巧12、合并多个单元格内容技巧1...
  • 有很多小伙伴不知道如何把多个表单里的数据求和。 这里教大家一个最简单的方法就是打开你电脑上的计算器,然后再手动输入就大功告成(好像哪里不对)。 重点在这里:第二种方法 先创建好你的表格 我想在合计中某一个...
  • 二、不同文档中的工作表合并 右键点击要复制的工作表-移动或复制 三、工作群组 工作群组的作用为同步编辑不同工作表中的内容与排版,首先按住ctrl点击需要用到的工作表,之后就可以在工作表中进行编辑,最后...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,825
精华内容 1,530
关键字:

多个excel工作簿合并求和