[VBA]汇总多个工作簿的指定工作表到同一个工作簿的指定工作表中

sub 汇总多个工作簿()

Application.ScreenUpdating = False

Dim wb As Workbook, f As String, l As String, n As String, m As String, j As Integer

f = ThisWorkbook.Path & "\"

l = f & "*.xls"

m = Dir(l)

Do While m <> ""

If m <> ThisWorkbook.Name Then

n = f & m

Workbooks.Open (n)

With ThisWorkbook.activesheet

.Range("b4:at34").ClearContents

For i = 4 To .Range("a1").CurrentRegion.Rows.Count

For j = 2 To .Range("a1").CurrentRegion.Columns.Count - 2 Step 3

For Each wb In Workbooks

If wb.Name <> ThisWorkbook.Name Then

aa = Left(wb.Name, InStrRev(wb.Name, ".") - 1)

If .Cells(2, j).Value = aa Then

.Cells(i, j) = Application.VLookup(.Cells(i, 1), wb.Worksheets(1).Range("a:b"), 2, 0)

.Cells(i, j + 1) = Application.VLookup(.Cells(i, 1), wb.Worksheets(1).Range("a:c"), 3, 0)

If VBA.IsNumeric(ThisWorkbook.activesheet.Cells(i, j + 1)) = False Then

ThisWorkbook.activesheet.Cells(i, j + 2) = 0

ElseIf ThisWorkbook.activesheet.Cells(i, j + 1) = 0 Then

ThisWorkbook.activesheet.Cells(i, j + 2) = 0

Else

ThisWorkbook.activesheet.Cells(i, j + 2) = ThisWorkbook.activesheet.Cells(i, j) / ThisWorkbook.activesheet.Cells(i, j + 1)

End If

End If

End If

Next

Next

Next

End With

End If

m = Dir

Loop

For Each wb In Workbooks

If wb.Name <> ThisWorkbook.Name Then

wb.Close False

End If

Next

Application.ScreenUpdating = True

End Sub

效果图:

不足:

调用excel本身的函数vlookup,数据量大的话,会导致运行速度慢,表格卡住的问题,后期优化,应用数组解决。

时间: 2024-10-14 07:05:29

[VBA]汇总多个工作簿的指定工作表到同一个工作簿的指定工作表中的相关文章

VBA 把一个工作簿中的表的数据传递到另一个工作簿中

Private Sub CommandButton2_Click() For Z = 2 To Sheet2.[b65536].End(3).Row Next Application.ScreenUpdating = False Dim j As Integer Dim souce As Worksheet Dim target As Workbook Set souce = ThisWorkbook.Worksheets("正式表") Set target = Workbooks.O

用python查找在指定目录下特定文件夹下的指定文件

本代码是在python2.*上边所写. 功能:在指定目录下查找特定文件夹下的特定文件. 实例:查找在packages目录下文件夹名为values下的strings.xml文件 #!/usr/bin/env python import os def walk_dir(path): filter_file_name = 'strings.xml' for root, dirs, files in os.walk(path): for dir_item in dirs: if dir_item ==

Rhel7 grep在文件中查找指定的字符串,将其输出到指定文件

Rhel7 grep在文件中查找指定的字符串,将其输出到指定文件 [[email protected] findfiles]# cat /usr/share/dict/words |grep seismic anaseismic antiseismic aseismic -- [[email protected] findfiles]# cat /usr/share/dict/words |grep seismic >>/root/wordlist [[email protected] fin

在JS中将指定表单内的“具有name数据的表单元素的值”封装为Get形式的字符串

//封装post时候,表单中所有具有name数据的表单元素的值,并返回“n=1&p=a” function serialize(formid) { var arr = []; var ipts = document.getElementById(formid).getElementsByTagName('input'); for (var i = 0; i < ipts.length; i++) { if (ipts[i].type=='text') { if (ipts[i].name)

VBA汇总指定多个工作簿的数据

Public Sub GatherFilesData() Application.ScreenUpdating = False Application.DisplayAlerts = False Application.Calculation = xlCalculationManual Application.StatusBar = ">>>>>>>>程序正在运行>>>>>>>>" On E

js-显示指定周数的周一和周日,指定月份的第一天和最后一天-----------个人百度 整理的

工作需求,给定一个年份的周期数,需要显示该周的周一和周日以及指定月份的第一天和最后一天 百度整理后显示贴出来,表示个人还不理解为什么,希望有人可以解释一下 贴代码: <script type="text/javascript"> var iweek = function(year, week) { var d = new Date(year, 0, 1);//初始化日期 d 表示输入年份的第一天 while (d.getDay() != 1) { d.setDate(d.g

tableView刷新指定的cell 或section和滚动到指定的位置

转自:http://blog.csdn.net/tianyou_code/article/details/54426494 //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2]; [tableview reloadSections:indexSet withRowAnimation:UITableViewRowAnimationAutomatic]; //一个cell刷新 NSIndexPath *index

数组的创建/查找数组里面的内容/添加数组中元素/使用指定的字符串把数组链接起来/判断数组内是否有指定的数组元素/四种遍历进行输出数组中的元素有哪些

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @autoreleasepool { //创建数组 //1.快速创建数组@[] NSArray*[email protected][@"month",@"tue",@" wed",@"fir"]; //2,创建空的数组 NSArray*arr=[[NSArray a

SQL SERVER 自定义函数 整数转成指定长度的16进制 转换成指定长度的16进制 不足补0

最近做项目扩展的时候,遇到问题就是将整型转换成指定长度的16进制 刚开始就是直接使用 cast(12 as varbinary(4))但是发现这个不能解决我的问题 所以就上网搜了一下,然后改了改,下面就是函数: 1 Create Function IntToHexLength(@Num int,@HxLength int) 2 returns varchar(16) 3 as 4 begin 5 declare @Mods int,@res varchar(16),@Length int 6 s