如何把多张工作表内容快速复制到一张表.docx

上传人:b****3 文档编号:27174454 上传时间:2023-06-27 格式:DOCX 页数:20 大小:26.53KB
下载 相关 举报
如何把多张工作表内容快速复制到一张表.docx_第1页
第1页 / 共20页
如何把多张工作表内容快速复制到一张表.docx_第2页
第2页 / 共20页
如何把多张工作表内容快速复制到一张表.docx_第3页
第3页 / 共20页
如何把多张工作表内容快速复制到一张表.docx_第4页
第4页 / 共20页
如何把多张工作表内容快速复制到一张表.docx_第5页
第5页 / 共20页
点击查看更多>>
下载资源
资源描述

如何把多张工作表内容快速复制到一张表.docx

《如何把多张工作表内容快速复制到一张表.docx》由会员分享,可在线阅读,更多相关《如何把多张工作表内容快速复制到一张表.docx(20页珍藏版)》请在冰豆网上搜索。

如何把多张工作表内容快速复制到一张表.docx

如何把多张工作表内容快速复制到一张表

如何把多张工作表内容快速复制到一张表

我有一份教师工资表,一个工作簿里有好多张工作表的,现在我想把各工作表里的内容全部合到一张表中,除了用复制粘贴的方法外,请问还能有什么好的方法快速合到一起吗

(首选)

Subyy()’声明过程名称为“yy”。

当要声明一个过程时,通常是以关键字“SUB”开头,并且以关键字“END”结束,在SUB关键字之前是用来指定此过程的作用域,例如public,static,或protected等。

在SUB关键字之后为过程最重要的三大部分:

过程名称、参数以及在SUB和ENDSUB之间的主体程序代码内容。

过程是可以执行的语句序列单元,所有可执行的代码必须包含在某个过程中,任何过程都不能嵌套在其它过程中,过程的名称必须在模块级别进行定义。

after:

=Sheets'新建一个工作表放在最后。

参数值和参数名之间应该使用“:

=”符号,而不是等号。

在代码中,属性和方法都是通过连接符“.”来和对象连接的。

Add是方法名,after是自变量,方法名与自变量之间用半角空格隔开。

Fori=1To-1'从第一个工作表到倒数第二个工作表

WithSheets(i)’with语句可以在一个单一对象或一个用户定义类型上执行一系列的语句。

使用with语句不仅可以简化程序代码,而且可以提高代码的运行效率。

With/endwith语句结构中以“.”开头的语句相当于引用了with语句中指定的对象。

当程序一旦进入with/endwith结构,with语句指定的对象就不能改变。

因此不能用with语句来设置多个不同的对象。

n=.[c65536].End(xlUp).Row'求出c列最大行号。

求出某列最大行号的目的是确定有数据区域的最下边界,为此,选择求最大行号列时,选择的列数据最下边界要最大限度包含所有的数据。

End和Row都是属性,此语句取得属性值后赋值给变量n。

此程序事先没有对变量进行声明。

在程序中取得对象的属性的代码结构:

变量=对象·属性。

.Range("a2:

V"&n).CopyActiveSheet.[c65536].End(xlUp).Offset(1,-2)'取a2开始到最后的数据copy到新表数据的下一行。

n=.[c65536].End(xlUp).Row得到C列最后一个非空单元格所在的行号,“.Offset(1,-2)”偏移“[c65536].End(xlUp)”得到单元格的位置开始复制后数据的粘贴位置。

由C列移到A列。

[c65536].End(xlUp):

求出C列最下边有数据的单元格,粘贴复制的数据时为了前面的数据不被后面粘贴上的数据覆盖,开始粘贴数据的位置在最下边有数据的单元格位置的基础上要用offset偏移。

EndWith

Next

EndSub’注:

在VISUALBASIC中要加入注释,直接在注释文字前加上’符号即可,在’符号之后的文字会被编译器忽略,也可以使用REM来进行注释,但使用’符号会更快捷一些,还可以节省内存及加快编译的效率。

以上代码粘贴位置、复制范围可以根据实际需要可变。

2010年5月用于林业旱灾调查一个工作簿上的所有工作表汇总到一张工作表的代码:

Subyy()'声明过程名称为"yy"。

当要声明一个过程时,通常是以关键字"SUB"开头,并且以关键字"END"结束,在SUB关键字之前是用来指定此过程的作用域,例如public,static,或protected等。

在SUB关键字之后为过程最重要的三大部分:

过程名称、参数以及在SUB和ENDSUB之间的主体程序代码内容。

过程是可以执行的语句序列单元,所有可执行的代码必须包含在某个过程中,任何过程都不能嵌套在其它过程中,过程的名称必须在模块级别进行定义。

after:

=Sheets'新建一个工作表放在最后。

参数值和参数名之间应该使用":

="符号,而不是等号。

在代码中,属性和方法都是通过连接符"."来和对象连接的。

Add是方法名,after是自变量,方法名与自变量之间用半角空格隔开。

Fori=1To-1'从第一个工作表到倒数第二个工作表

WithSheets(i)'with语句可以在一个单一对象或一个用户定义类型上执行一系列的语句。

使用with语句不仅可以简化程序代码,而且可以提高代码的运行效率。

With/endwith语句结构中以"."开头的语句相当于引用了with语句中指定的对象。

当程序一旦进入with/endwith结构,with语句指定的对象就不能改变。

因此不能用with语句来设置多个不同的对象。

n=.[a65536].End(xlUp).Row'分别求出最大行号。

End和Row都是属性,此语句取得属性值后赋值给变量n。

此程序事先没有对变量进行声明。

在程序中取得对象的属性的代码结构:

变量=对象·属性。

.Range("a3:

v"&n).CopyActiveSheet.[a65536].End(xlUp).Offset(1,0)'取a2开始到最后的数据copy到新表数据的下一行。

n=.[c65536].End(xlUp).Row得到C列最后一个非空单元格所在的行号,".Offset(1,-2)"偏移"[c65536].End(xlUp)"得到单元格的位置开始复制后数据的粘贴位置。

由C列移到A列。

EndWith

Next

EndSub

注:

在VISUALBASIC中要加入注释,直接在注释文字前加上’符号即可,在’符号之后的文字会被编译器忽略,也可以使用REM来进行注释,但使用’符号会更快捷一些,还可以节省内存及加快编译的效率。

 

如果当前活动工作表的A列填写的是学生的姓名,现在我们想在表中A列最后一个学生的后面增加一个叫“张青”的学生,则代码为:

 代码:

([A65536].End(xlUp).Row+1,1).Value="张青"

 

“[A65536].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).Select

 

Range("b65536").End(xlUp).Row问题

高手赐教其含义与区别Range("a65536").End(xlUp).RowRange("b65536").End(xlUp).RowRange("d65536").End(xlUp).Row

Range("k65536").End(xlUp).Row

看一下vba中END的帮助就知道了。

End属性参阅应用于示例特性返回一个Range对象,该对象代表包含源区域的区域尾端的单元格。

等同于按键End+向上键、End+向下键、End+向左键或End+向右键。

Range对象,只读。

(Direction)expression必需。

该表达式返回“应用于”列表中的对象之一。

DirectionXlDirection类型,必需。

所要移动的方向。

XlDirection可为XlDirection常量之一。

xlDownxlToRightxlToLeftxlUp示例本示例选定包含单元格B4的区域中B列顶端的单元格。

Range("B4").End(xlUp).Select本示例选定包含单元格B4的区域中第4行尾端的单元格。

Range("B4").End(xlToRight).Select本示例将选定区域从单元格B4延伸至第四行最后一个包含数据的单元格。

Worksheets("Sheet1").ActivateRange("B4",Range("B4").End(xlToRight)).Select

Range("a65536").End(xlUp).RowA列数据区域最后一行的行号Range("b65536").End(xlUp).RowB列数据区域最后一行的行号Range("d65536").End(xlUp).RowD列数据区域最后一行的行号Range("k65536").End(xlUp).RowK列数据区域最后一行的行号

Range("a65536").End(xlUp).RowA列第65536行之上的最后有数据的单元格所在行数

回复

Range("b65536").End(xlUp).Row=B列最后一个非空单元格的行数Range("a65536").End(xlUp).Row=A列最后一个非空单元格的行数Range("b65536").End(xlUp).Row=B列最后一个非空单元格的行数Range("d65536").End(xlUp).Row=D列最后一个非空单元格的行数Range("k65536").End(xlUp).Row=K列最后一个非空单元格的行数

请教.end(xlUp).row的含义

经常在VBA中常见如下代码:

DimRngAsIntegerRng=

代码详解

定义RNG作为一个整型变量'第二行的"sheets1"这种写法是错误的.正确的表述方法应为"sheet1"或"sheets

(1)"sheet1,对工作表对象的称呼;range("a65536")指一个range对象,具体指第一列最后一行;END,range对象的END属性,也返回一个对象,我理解为基于上述对象的延伸至最后一个RANGE对象.具体延伸的方向要看它给出的参数.比如xlToLeft、xlToRight、xlUp或xlDown。

ROW返回区域中第一块的第一行的行号。

Long类型,只读

多谢两位高手指点,看完以后我是这样理解的,不知对否?

    Range("A65536").End(xlUp).Row是指第一列最后一个有数据单元格的行数,它的下一行即加1就是3楼所说的要添加数据的空白单元格

汇总工作表数据

2010-06-0300:

44

方法一:

SubGetdata()DimErowAsInteger,cAsVariant,SerowAsIntegerErow=Sheets("Total").[a65536].End(xlUp).Row+1

IfErow>4ThenSheets("Total").Rows("4:

"&Erow).ClearContentsForEachcInIf<>"Total"ThenSerow=c.[a65536].End(xlUp).RowErow=Sheets("Total").[a65536].End(xlUp).Row+1("a4:

l"&Serow).CopyDestination:

=Sheets("Total").Range("a"&Erow)EndIfNextcEndSub

方法二

SubSQLConbime()Range("A4:

L65536").ClearContentsDimiRowAsInteger,sqlTempAsString,sqlAsStringSetcnn=CreateObject("")"provider=properties=excel;datasource="&ForEachshInSheetsIf<>"理数"TheniRow=("a3").End(xlDown).RowsqlTemp="select*from["&&"$A3:

L"&iRow&"]orderby班别,座号"sql=sqlTemp&"union"&sqlEndIfNextsql=Left(sql,Len(sql)-6)Sheets("理数").Range("a4").CopyFromRecordset(sql):

Setcnn=NothingEndSub

方法三

SubConbimeAll()DimyyAsLong

yy=[a65536].End(xlUp).Row+1Range("a2:

l"&yy).ClearContentsSetconn=CreateObject("")Fori=1To4"provider=properties=excel;datasource="&Sq2="select*from["&Range("p"&i)&"$a3:

l1000]"[a65536].End(xlUp).Offset(1,0).CopyFromRecordset(Sq2)NextiSetconn=NothingEndSub

 

把工作簿中的200多张表复制到一张工作表里(首选)

我是做收款工作的,

每天收款情况做一张表格,

现在快一年了,今天老板突然要我把这9个月积累的每日数据全部反映到一张工作表上,

其实点复制粘贴200多张表不是大问题,主要是怕中途看花了眼,漏了或者重复了就很麻烦,

请教高手帮忙,用公式或者VBA,小弟感激不尽。

右键点击新工作表标签,选择“查看代码”,将下面的代码粘贴到打开的VBE窗口中:

SubShcopy()

DimnRow&,R1%,Rs%,Ls%’&:

长整数型;%:

整数型。

R1=2'每页从第2行开始复制(可修改)

=False’如果对指定对象启用事件,则该值为True。

Boolean类型,可读写

=False

Fori=2To’最后一张工作表。

WithSheets(i)

Rs=.+1-R1’对于Worksheet对象,Rows属性返回代表指定工作表所有行的Range对象。

Range对象,只读。

工作表上已使用区域的行数。

Ls=.Count属性。

描述:

返回集合或Dictionary对象中的条目数。

只读。

语法:

object总是“应用于”列表中某一项的名称。

工作表上已使用区域的列数。

arr=.Range("a"&R1).Resize(Rs,Ls)‘arr为变量,在VBA中,变量无需声明就可以直接使用,此时该变量为变体变量。

Resize属性。

在Excel中,Resize属性的功能为调整指定区域的大小。

返回Range对象,该对象代表调整后的区域。

(RowSize,ColumnSize)expression必需。

该表达式返回要调整大小的Range对象。

RowSizeVariant类型,可选。

新区域中的行数。

如果省略该参数,则该区域中的行数保持不变。

ColumnSizeVariant类型,可选。

新区域中的列数。

如果省略该参数。

则该区域中的列数保持不变。

Range("a65536").End(xlUp).Offset

(1).Resize(Rs,Ls)=arr

EndWith

Next

=True

=True

EndSub

修改“开始行号”。

将光标定位到代码中间任意位置,按F5运行它。

关闭VBE窗口。

注意单词之间要用空格隔开。

Excel多个工作簿中的工作表合并到一个工作簿中

有时,需要将多个Excel工作簿中的工作表合并到一个工作簿中。

有多种合并工作簿的情形,下面先给出一种合并多个工作簿的VBA范例,供参考。

(此方法将一个工作簿中所有的工作表复制到一张工作表上)

方法1

SubCombineWorkbooks()

DimwkAsWorkbook

DimshAsWorksheet

DimstrFileNameAsString

DimstrFileDirAsString

DimnmAsString

nm=

strFileDir=&"\"

=False

strFileName=Dir(strFileDir&"*.xls")

DoWhilestrFileName<>vbNullString

IfstrFileName<>nmThen

MsgBoxstrFileName

Setwk=(Filename:

=strFileDir&strFileName,ReadOnly:

=True)

strFileName=Left(Left(strFileName,Len(strFileName)-4),29)'取主文件名,除掉.XLS

ForEachshIn

After:

='工作表命名,以工作表所在文件名为类

If>1Then

=strFileName&

Else

=strFileName

EndIf

Next

SaveChanges:

=False

EndIf

strFileName=Dir

Loop

=True

EndSub

方法2

SubUnWorksheets()

=False

DimljAsString

DimdirnameAsString

DimnmAsString

DimsnameAsString

DimiAsInteger,iiAsInteger

lj=

nm=

dirname=Dir(lj&"\*.xls")'查找文件

DoWhiledirname<>""

Ifdirname<>nmThen

Filename:

=lj&"\"&dirname'打开文件

ii='统计工作表个数

'复制新打开工作簿的每一个工作表到当前工作表(After:

=最后一个后面

Fori=1Toii

Workbooks(dirname).Sheets(i).CopyAfter:

=False

EndIf

dirname=Dir

Loop

EndSub

在同一文件夹下有多个工作簿,其中有一个用于汇总的工作簿,将除该汇总工作簿外的其它工作簿中的每一张工作表的数据汇总到该汇总工作簿的一张工作表中。

好用!

SubUnionWorksheets()

=False’关闭屏幕更新

DimljAsString

DimdirnameAsString

DimnmAsString

DimiAsInteger,iiAsInteger

lj=’Path属性。

返回指定文件、文件夹、或驱动器的路径。

nm=’Name属性。

指定一个控件或对象的名称或与Font对象相关的字体的名称。

变量赋值使用=“等号”,“=”后的值可以是单纯的数值、字符串或表达式。

dirname=Dir(lj&"\*.xls")’Dir函数。

返回一个String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。

’Clear方法。

清除Err对象的所有属性设置。

DoWhiledirname<>""’前置式DO…LOOP循环。

Ifdirname<>nmThen

Filename:

=lj&"\"&dirname’Open方法。

“<>”为比较运算符“不等于”。

ii=Sheets属性

Workbooks(nm).Activate’Activate方法。

Workbooks(nm)属使用工作簿名称引用workbook,语法格式为:

workbook(工作簿名称)。

'复制新打开工作簿的每一个工作表的已用区域到当前工作表

Fori=1Toii

Workbooks(dirname).Sheets(i)._

Range("a65536").End(xlUp).Offset(2,0)’UsedRange属性。

返回代表指定工作表上已使用区域的Range对象。

只读

Next

Workbooks(dirname).CloseFalse’Close方法。

关闭一个打开的TextStream文件。

语法:

object始终是一个TextStream对象的名字

EndIf

dirname=Dir

Loop

EndSub

如何利用VBA将多工作表的数据汇总而不复制标题?

A:

将sheet2工作表中待复制的数据定义为“表1”,将sheet3工作表中待复制的数据定义为“表2”ALT+F11→新建模块,并输入如下代码

Sub利用表仅复制数据()

DimshAsWorksheet,I

ForEachshInWorksheets

If<>"Sheet1"Then

I=I+1

Range("表"&I).CopySheets("Sheet1").Range("A65536").End(xlUp).Offset(1,0)

EndIf

Nextsh

EndSub

 

如何将多个工作簿中的工作表一次性合S

问题:

如何将多个工作簿中的工作表一次性合S

答案:

关于如何将多个工作簿(xls文件)中的工作表(worksheet)复制到同一个工作簿中的解决。

下面的代码可以将某个磁盘目录下的多个xls文件的复制到含有这段代码的xls文件中,而且xls文件可以根据处理worksheet的数量自动的增加xls文件中worksheet的数量。

使用时将代码复制到xls文件的宏内,然后运行宏main即可。

代码中运用了filesystemobject对象和excel的range对象的copy方法以及worksheet和workbook对象的add方法。

这里就不在赘述,可以在excelvba的帮助中找到。

SubMergesheet(ByValsPathAsString)

Dimfs,fd,flAsObject

DimxlbookAsWorkbook

DimxlsheetAsWorksheet

Dimi_cntAsInteger

i_cnt=1

Setfs=CreateObject("")'建立filesystemobject

IfNot(sPath)Then

MsgBox"目录不存在!

",vbCritical

ExitSub

EndIf

Setfd=(sPath)'或取文件夹

ForEachflIn'依此处理文件夹中的文件

IfRight(Trim,3)="xls"Then'只处理xls文件

Setxlbook="\"'打开xls文件

Ifi_cnt<>3Then'默认的worksheet数量是3,如果超过就自动的增加

Setxlsheet=

(1).

Else

Setxlsheet=

(1).Worksheets(i_cnt)

EndIf

(1).(1,1)'复制worksheet

i_cnt=i_cnt1

'关闭已经打开的xls文件

EndIf

Next

Setfl=Nothi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1