1、如何把多张工作表内容快速复制到一张表如何把多张工作表内容快速复制到一张表我有一份教师工资表,一个工作簿里有好多张工作表的,现在我想把各工作表里的内容全部合到一张表中,除了用复制粘贴的方法外,请问还能有什么好的方法快速合到一起吗(首选)Sub yy() 声明过程名称为“yy”。当要声明一个过程时,通常是以关键字“SUB”开头,并且以关键字“END”结束,在SUB关键字之前是用来指定此过程的作用域,例如public,static, 或protected 等。在SUB关键字之后为过程最重要的三大部分:过程名称、参数以及在SUB和END SUB之间的主体程序代码内容。过程是可以执行的语句序列单元,所有
2、可执行的代码必须包含在某个过程中,任何过程都不能嵌套在其它过程中,过程的名称必须在模块级别进行定义。 after:=Sheets新建一个工作表放在最后。参数值和参数名之间应该使用“:=”符号,而不是等号。在代码中,属性和方法都是通过连接符“.”来和对象连接的。Add是方法名,after是自变量,方法名与自变量之间用半角空格隔开。For i = 1 To - 1从第一个工作表到倒数第二个工作表With Sheets(i)with语句可以在一个单一对象或一个用户定义类型上执行一系列的语句。使用with语句不仅可以简化程序代码,而且可以提高代码的运行效率。 With/end with语句结构中以“.
3、”开头的语句相当于引用了with语句中指定的对象。当程序一旦进入with/end with结构,with语句指定的对象就不能改变。因此不能用with语句来设置多个不同的对象。n = .c65536.End(xlUp).Row求出c列最大行号。求出某列最大行号的目的是确定有数据区域的最下边界,为此,选择求最大行号列时,选择的列数据最下边界要最大限度包含所有的数据。End和Row都是属性,此语句取得属性值后赋值给变量n。此程序事先没有对变量进行声明。在程序中取得对象的属性的代码结构:变量=对象属性。.Range(a2:V&n).Copy ActiveSheet.c65536.End(xlUp).O
4、ffset(1, -2)取a2开始到最后的数据copy到新表数据的下一行。n =.c65536.End(xlUp) .Row得到C列最后一个非空单元格所在的行号,“.Offset(1, -2)”偏移“c65536.End(xlUp)”得到单元格的位置开始复制后数据的粘贴位置。由C列移到A列。c65536.End(xlUp):求出C列最下边有数据的单元格,粘贴复制的数据时为了前面的数据不被后面粘贴上的数据覆盖,开始粘贴数据的位置在最下边有数据的单元格位置的基础上要用offset偏移。End WithNextEnd Sub 注:在VISUAL BASIC中要加入注释,直接在注释文字前加上符号即可,
5、在符号之后的文字会被编译器忽略,也可以使用REM来进行注释,但使用符号会更快捷一些,还可以节省内存及加快编译的效率。以上代码粘贴位置、复制范围可以根据实际需要可变。2010年5月用于林业旱灾调查一个工作簿上的所有工作表汇总 到一张工作表的代码:Sub yy() 声明过程名称为yy。当要声明一个过程时,通常是以关键字SUB开头,并且以关键字END结束,在SUB关键字之前是用来指定此过程的作用域,例如public,static, 或protected 等。在SUB关键字之后为过程最重要的三大部分:过程名称、参数以及在SUB和END SUB之间的主体程序代码内容。过程是可以执行的语句序列单元,所有可
6、执行的代码必须包含在某个过程中,任何过程都不能嵌套在其它过程中,过程的名称必须在模块级别进行定义。 after:=Sheets 新建一个工作表放在最后。参数值和参数名之间应该使用:=符号,而不是等号。在代码中,属性和方法都是通过连接符.来和对象连接的。Add是方法名,after是自变量,方法名与自变量之间用半角空格隔开。For i = 1 To - 1 从第一个工作表到倒数第二个工作表With Sheets(i) with语句可以在一个单一对象或一个用户定义类型上执行一系列的语句。使用with语句不仅可以简化程序代码,而且可以提高代码的运行效率。 With/end with语句结构中以.开头的
7、语句相当于引用了with语句中指定的对象。当程序一旦进入with/end with结构,with语句指定的对象就不能改变。因此不能用with语句来设置多个不同的对象。n = .a65536.End(xlUp).Row 分别求出最大行号。 End和Row都是属性,此语句取得属性值后赋值给变量n。此程序事先没有对变量进行声明。在程序中取得对象的属性的代码结构:变量=对象属性。.Range(a3:v & n).Copy ActiveSheet.a65536.End(xlUp).Offset(1, 0) 取a2开始到最后的数据copy到新表数据的下一行。n =.c65536.End(xlUp) .Ro
8、w得到C列最后一个非空单元格所在的行号,.Offset(1, -2)偏移c65536.End(xlUp)得到单元格的位置开始复制后数据的粘贴位置。由C列移到A列。End WithNextEnd Sub注:在VISUAL BASIC中要加入注释,直接在注释文字前加上符号即可,在符号之后的文字会被编译器忽略,也可以使用REM来进行注释,但使用符号会更快捷一些,还可以节省内存及加快编译的效率。如果当前活动工作表的A列填写的是学生的姓名,现在我们想在表中A列最后一个学生的后面增加一个叫“张青”的学生,则代码为:代码:(A65536.End(xlUp).Row + 1, 1).Value = 张青“A6
9、5536.End(xlUp).Row”语句来返回A列的最后一个非空单元格的行号(C1).End(xlDown).Row返回第一次遇到空单元格前的单元格的数量。(注:当C列有空白单元格时用:myEndRow=sheets(sheet1).range(C65536).End(xlUp).row)a65536.End(xlUp) 取得A列最后一个数据的位置本示例选定包含单元格 B4 的区域中 B 列顶端的单元格。Range(B4).End(xlUp).SelectRange(b65536).End(xlUp).Row 问题高手赐教其含义与区别Range(a65536).End(xlUp).RowRa
10、nge(b65536).End(xlUp).RowRange(d65536).End(xlUp).RowRange(k65536).End(xlUp).Row看一下vba中END的帮助就知道了。End 属性参阅应用于示例特性返回一个 Range 对象,该对象代表包含源区域的区域尾端的单元格。等同于按键 End+ 向上键、End+ 向下键、End+ 向左键或 End+ 向右键。Range 对象,只读。(Direction)expression 必需。 该表达式返回“应用于”列表中的对象之一。Direction XlDirection 类型,必需。所要移动的方向。XlDirection 可为 Xl
11、Direction 常量之一。 xlDown xlToRight xlToLeft xlUp 示例本示例选定包含单元格 B4 的区域中 B 列顶端的单元格。Range(B4).End(xlUp).Select 本示例选定包含单元格 B4 的区域中第 4 行尾端的单元格。Range(B4).End(xlToRight).Select 本示例将选定区域从单元格 B4 延伸至第四行最后一个包含数据的单元格。Worksheets(Sheet1).ActivateRange(B4, Range(B4).End(xlToRight).SelectRange(a65536).End(xlUp).Row A列
12、数据区域最后一行的行号Range(b65536).End(xlUp).Row B列数据区域最后一行的行号Range(d65536).End(xlUp).Row D列数据区域最后一行的行号Range(k65536).End(xlUp).Row K列数据区域最后一行的行号Range(a65536).End(xlUp).RowA列第65536行之上的最后有数据的单元格所在行数回复Range(b65536).End(xlUp).Row = B列最后一个非空单元格的行数Range(a65536).End(xlUp).Row=A列最后一个非空单元格的行数Range(b65536).End(xlUp).Ro
13、w = B列最后一个非空单元格的行数Range(d65536).End(xlUp).Row = D列最后一个非空单元格的行数Range(k65536).End(xlUp).Row= K列最后一个非空单元格的行数请教.end(xlUp).row的含义经常在VBA中常见如下代码:Dim Rng As IntegerRng = 代码详解定义RNG作为一个整型变量第二行的sheets1这种写法是错误的.正确的表述方法应为sheet1或sheets(1)sheet1,对工作表对象的称呼;range(a65536)指一个range对象,具体指第一列最后一行;END,range对象的END属性,也返回一个对
14、象,我理解为基于上述对象的延伸至最后一个RANGE对象.具体延伸的方向要看它给出的参数.比如xlToLeft、xlToRight、xlUp 或 xlDown。ROW返回区域中第一块的第一行的行号。Long 类型,只读多谢两位高手指点,看完以后我是这样理解的,不知对否? Range(A65536).End(xlUp).Row 是指第一列最后一个有数据单元格的行数,它的下一行即加 1 就是3楼所说的要添加数据的空白单元格汇总工作表数据2010-06-03 00:44方法一:Sub Getdata()Dim Erow As Integer, c As Variant, Serow As Intege
15、rErow = Sheets(Total).a65536.End(xlUp).Row + 1If Erow 4 Then Sheets(Total).Rows(4: & Erow).ClearContentsFor Each c In If Total Then Serow = c.a65536.End(xlUp).Row Erow = Sheets(Total).a65536.End(xlUp).Row + 1 (a4:l & Serow).Copy Destination:=Sheets(Total).Range(a & Erow) End IfNext cEnd Sub方法二Sub SQ
16、LConbime()Range(A4:L65536).ClearContentsDim iRow As Integer, sqlTemp As String, sql As String Set cnn = CreateObject() provider= properties=excel ;data source= & For Each sh In Sheets If 理数 Then iRow = (a3).End(xlDown).Row sqlTemp = select * from & & $A3:L & iRow & order by 班别,座号 sql = sqlTemp & uni
17、on & sql End If Next sql = Left(sql, Len(sql) - 6) Sheets(理数).Range(a4).CopyFromRecordset (sql) : Set cnn = NothingEnd Sub方法三Sub ConbimeAll() Dim yy As Long yy = a65536.End(xlUp).Row + 1 Range(a2:l & yy).ClearContents Set conn = CreateObject() For i = 1 To 4 provider= properties=excel ;data source=
18、& Sq2 = select * from & Range(p & i) & $a3:l1000 a65536.End(xlUp).Offset(1, 0).CopyFromRecordset (Sq2) Next i Set conn = NothingEnd Sub把工作簿中的200多张表复制到一张工作表里(首选)我是做收款工作的,每天收款情况做一张表格,现在快一年了,今天老板突然要我把这9个月积累的每日数据全部反映到一张工作表上,其实点复制粘贴200多张表不是大问题,主要是怕中途看花了眼,漏了或者重复了就很麻烦,请教高手帮忙,用公式或者VBA,小弟感激不尽。右键点击新工作表标签,选择“查
19、看代码”,将下面的代码粘贴到打开的VBE窗口中:Sub Shcopy()Dim nRow&, R1%, Rs%, Ls%&:长整数型;%:整数型。R1 = 2 每页从第2行开始复制(可修改) = False 如果对指定对象启用事件,则该值为 True。Boolean 类型,可读写 = FalseFor i = 2 To 最后一张工作表。With Sheets(i)Rs = . + 1 - R1 对于 Worksheet 对象,Rows 属性返回代表指定工作表所有行的 Range 对象。Range 对象,只读。工作表上已使用区域的行数。Ls = . Count 属性。描述:返回集合或 Dicti
20、onary 对象中的条目数。只读。语法: object 总是“应用于”列表中某一项的名称。工作表上已使用区域的列数。arr = .Range(a & R1).Resize(Rs, Ls)arr为变量,在VBA中,变量无需声明就可以直接使用,此时该变量为变体变量。Resize 属性。在Excel中,Resize 属性的功能为调整指定区域的大小。返回 Range 对象,该对象代表调整后的区域。 (RowSize, ColumnSize) expression 必需。该表达式返回要调整大小的 Range 对象。 RowSize Variant 类型,可选。新区域中的行数。如果省略该参数,则该区域中的
21、行数保持不变。 ColumnSize Variant类型,可选。新区域中的列数。如果省略该参数。则该区域中的列数保持不变。Range(a65536).End(xlUp).Offset(1).Resize(Rs, Ls) = arrEnd WithNext = True = TrueEnd Sub修改“开始行号”。将光标定位到代码中间任意位置,按F5运行它。关闭VBE窗口。注意单词之间要用空格隔开。Excel多个工作簿中的工作表合并到一个工作簿中 有时,需要将多个Excel工作簿中的工作表合并到一个工作簿中。有多种合并工作簿的情形,下面先给出一种合并多个工作簿的VBA范例,供参考。(此方法将一个
22、工作簿中所有的工作表复制到一张工作表上)方法1Sub CombineWorkbooks()Dim wk As WorkbookDim sh As WorksheetDim strFileName As StringDim strFileDir As StringDim nm As Stringnm = strFileDir = & = FalsestrFileName = Dir(strFileDir & *.xls)Do While strFileName vbNullStringIf strFileName nm ThenMsgBox strFileNameSet wk = (Filena
23、me:=strFileDir & strFileName, ReadOnly:=True)strFileName = Left(Left(strFileName, Len(strFileName) - 4), 29) 取主文件名,除掉.XLSFor Each sh In After:=工作表命名,以工作表所在文件名为类If 1 Then = strFileName & Else = strFileNameEnd IfNext SaveChanges:=FalseEnd IfstrFileName = DirLoop = TrueEnd Sub方法2Sub UnWorksheets() = Fa
24、lseDim lj As StringDim dirname As StringDim nm As StringDim sname As StringDim i As Integer, ii As Integerlj = nm = dirname = Dir(lj & *.xls) 查找文件Do While dirname If dirname nm Then Filename:=lj & & dirname 打开文件ii = 统计工作表个数复制新打开工作簿的每一个工作表到当前工作表(After:=最后一个后面For i = 1 To iiWorkbooks(dirname).Sheets(i
25、).Copy After:= FalseEnd Ifdirname = DirLoopEnd Sub在同一文件夹下有多个工作簿,其中有一个用于汇总的工作簿,将除该汇总工作簿外的其它工作簿中的每一张工作表的数据汇总到该汇总工作簿的一张工作表中。好用!Sub UnionWorksheets() = False关闭屏幕更新Dim lj As String Dim dirname As StringDim nm As StringDim i As Integer, ii As Integerlj = Path 属性。返回指定文件、文件夹、或驱动器的路径。nm = Name属性。指定一个控件或对象的名称
26、或与 Font 对象相关的字体的名称。变量赋值使用=“等号”,“=”后的值可以是单纯的数值、字符串或表达式。dirname = Dir(lj & *.xls) Dir 函数。返回一个String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。 Clear 方法。清除 Err 对象的所有属性设置。Do While dirname 前置式DOLOOP循环。If dirname nm Then Filename:=lj & & dirname Open 方法。“”为比较运算符“不等于”。ii = Sheets 属性Workbooks(nm).Activate
27、 Activate方法。Workbooks(nm)属使用工作簿名称引用workbook,语法格式为:workbook( 工作簿名称)。复制新打开工作簿的每一个工作表的已用区域到当前工作表For i = 1 To iiWorkbooks(dirname).Sheets(i). _Range(a65536).End(xlUp).Offset(2, 0) UsedRange 属性。返回代表指定工作表上已使用区域的 Range 对象。只读NextWorkbooks(dirname).Close False Close 方法。关闭一个打开的 TextStream 文件。语法: object始终是一个 T
28、extStream 对象的名字End Ifdirname = DirLoopEnd Sub如何利用VBA将多工作表的数据汇总而不复制标题? A:将sheet2工作表中待复制的数据定义为“表1”,将sheet3工作表中待复制的数据定义为“表2”ALT+F11新建模块,并输入如下代码 Sub 利用表仅复制数据()Dim sh As Worksheet, IFor Each sh In WorksheetsIf Sheet1 Then I = I + 1 Range(表 & I).Copy Sheets(Sheet1).Range(A65536).End(xlUp).Offset(1, 0)End
29、IfNext shEnd Sub如何将多个工作簿中的工作表一次性合S 问题:如何将多个工作簿中的工作表一次性合S答案: 关于如何将多个工作簿(xls文件)中的工作表(worksheet)复制到同一个工作簿中的解决。下面的代码可以将某个磁盘目录下的多个xls文件的复制到含有这段代码的xls文件中,而且xls文件可以根据处理worksheet的数量自动的增加xls文件中worksheet的数量。使用时将代码复制到xls文件的宏内,然后运行宏main即可。代码中运用了filesystemobject对象和excel的range对象的copy方法以及worksheet和workbook对象的add方法
30、。这里就不在赘述,可以在excel vba的帮助中找到。Sub Mergesheet(ByVal sPath As String)Dim fs, fd, fl As ObjectDim xlbook As WorkbookDim xlsheet As WorksheetDim i_cnt As Integeri_cnt = 1Set fs = CreateObject() 建立filesystemobjectIf Not (sPath) ThenMsgBox 目录不存在!, vbCriticalExit SubEnd IfSet fd = (sPath) 或取文件夹For Each fl In 依此处理文件夹中的文件If Right(Trim, 3) = xls Then 只处理xls文件Set xlbook = 打开xls文件If i_cnt 3 Then 默认的worksheet数量是3,如果超过就自动的增加Set xlsheet = (1).ElseSet xlsheet = (1).Worksheets(i_cnt)End If(1). (1, 1) 复制worksheeti_cnt = i_cnt 1 关闭已经打开的xls文件End IfNextSet fl = Nothi
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1