版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、如何把多張工作表內(nèi)容快速?gòu)?fù)制到一張表我有一份教師工資表,一個(gè)工作簿里有好多張工作表的,現(xiàn)在我想把各工作表里的內(nèi)容全部合到一張表中,除了用復(fù)制粘貼的方法外,請(qǐng)問(wèn)還能有什么好的方法快速合到一起嗎?(首選)sub yy() 聲明過(guò)程名稱(chēng)為“yy”。當(dāng)要聲明一個(gè)過(guò)程時(shí),通常是以關(guān)鍵字“sub”開(kāi)頭,并且以關(guān)鍵字“end”結(jié)束,在sub關(guān)鍵字之前是用來(lái)指定此過(guò)程的作用域,例如public,static, 或protected 等。在sub關(guān)鍵字之后為過(guò)程最重要的三大部分:過(guò)程名稱(chēng)、參數(shù)以及在sub和end sub之間的主體程序代碼內(nèi)容。過(guò)程是可以執(zhí)行的語(yǔ)句序列單元,所有可執(zhí)行的代碼必須包含在某個(gè)過(guò)程中,
2、任何過(guò)程都不能嵌套在其它過(guò)程中,過(guò)程的名稱(chēng)必須在模塊級(jí)別進(jìn)行定義。sheets.add after:=sheets(sheets.count)'新建一個(gè)工作表放在最后。參數(shù)值和參數(shù)名之間應(yīng)該使用“:=”符號(hào),而不是等號(hào)。在代碼中,屬性和方法都是通過(guò)連接符“.”來(lái)和對(duì)象連接的。add是方法名,after是自變量,方法名與自變量之間用半角空格隔開(kāi)。for i = 1 to sheets.count - 1'從第一個(gè)工作表到倒數(shù)第二個(gè)工作表with sheets(i)with語(yǔ)句可以在一個(gè)單一對(duì)象或一個(gè)用戶(hù)定義類(lèi)型上執(zhí)行一系列的語(yǔ)句。使用with語(yǔ)句不僅可以簡(jiǎn)化程序代碼,而且可以提高
3、代碼的運(yùn)行效率。 with/end with語(yǔ)句結(jié)構(gòu)中以“.”開(kāi)頭的語(yǔ)句相當(dāng)于引用了with語(yǔ)句中指定的對(duì)象。當(dāng)程序一旦進(jìn)入with/end with結(jié)構(gòu),with語(yǔ)句指定的對(duì)象就不能改變。因此不能用with語(yǔ)句來(lái)設(shè)置多個(gè)不同的對(duì)象。n = .c65536.end(xlup).row'求出c列最大行號(hào)。求出某列最大行號(hào)的目的是確定有數(shù)據(jù)區(qū)域的最下邊界,為此,選擇求最大行號(hào)列時(shí),選擇的列數(shù)據(jù)最下邊界要最大限度包含所有的數(shù)據(jù)。end和row都是屬性,此語(yǔ)句取得屬性值后賦值給變量n。此程序事先沒(méi)有對(duì)變量進(jìn)行聲明。在程序中取得對(duì)象的屬性的代碼結(jié)構(gòu):變量=對(duì)象·屬性。.range(&q
4、uot;a2:v"&n).copy activesheet.c65536.end(xlup).offset(1, -2)'取a2開(kāi)始到最后的數(shù)據(jù)copy到新表數(shù)據(jù)的下一行。n =.c65536.end(xlup) .row得到c列最后一個(gè)非空單元格所在的行號(hào),“.offset(1, -2)”偏移“c65536.end(xlup)”得到單元格的位置開(kāi)始復(fù)制后數(shù)據(jù)的粘貼位置。由c列移到a列。c65536.end(xlup):求出c列最下邊有數(shù)據(jù)的單元格,粘貼復(fù)制的數(shù)據(jù)時(shí)為了前面的數(shù)據(jù)不被后面粘貼上的數(shù)據(jù)覆蓋,開(kāi)始粘貼數(shù)據(jù)的位置在最下邊有數(shù)據(jù)的單元格位置的基礎(chǔ)上要用offs
5、et偏移。end withnextend sub 注:在visual basic中要加入注釋?zhuān)苯釉谧⑨屛淖智凹由戏?hào)即可,在符號(hào)之后的文字會(huì)被編譯器忽略,也可以使用rem來(lái)進(jìn)行注釋?zhuān)褂梅?hào)會(huì)更快捷一些,還可以節(jié)省內(nèi)存及加快編譯的效率。以上代碼粘貼位置、復(fù)制范圍可以根據(jù)實(shí)際需要可變。2010年5月用于林業(yè)旱災(zāi)調(diào)查一個(gè)工作簿上的所有工作表匯總 到一張工作表的代碼:sub yy() '聲明過(guò)程名稱(chēng)為"yy"。當(dāng)要聲明一個(gè)過(guò)程時(shí),通常是以關(guān)鍵字"sub"開(kāi)頭,并且以關(guān)鍵字"end"結(jié)束,在sub關(guān)鍵字之前是用來(lái)指定此過(guò)程的作用域
6、,例如public,static, 或protected 等。在sub關(guān)鍵字之后為過(guò)程最重要的三大部分:過(guò)程名稱(chēng)、參數(shù)以及在sub和end sub之間的主體程序代碼內(nèi)容。過(guò)程是可以執(zhí)行的語(yǔ)句序列單元,所有可執(zhí)行的代碼必須包含在某個(gè)過(guò)程中,任何過(guò)程都不能嵌套在其它過(guò)程中,過(guò)程的名稱(chēng)必須在模塊級(jí)別進(jìn)行定義。sheets.add after:=sheets(sheets.count) '新建一個(gè)工作表放在最后。參數(shù)值和參數(shù)名之間應(yīng)該使用":="符號(hào),而不是等號(hào)。在代碼中,屬性和方法都是通過(guò)連接符"."來(lái)和對(duì)象連接的。add是方法名,after是自變量,
7、方法名與自變量之間用半角空格隔開(kāi)。for i = 1 to sheets.count - 1 '從第一個(gè)工作表到倒數(shù)第二個(gè)工作表with sheets(i) 'with語(yǔ)句可以在一個(gè)單一對(duì)象或一個(gè)用戶(hù)定義類(lèi)型上執(zhí)行一系列的語(yǔ)句。使用with語(yǔ)句不僅可以簡(jiǎn)化程序代碼,而且可以提高代碼的運(yùn)行效率。 with/end with語(yǔ)句結(jié)構(gòu)中以"."開(kāi)頭的語(yǔ)句相當(dāng)于引用了with語(yǔ)句中指定的對(duì)象。當(dāng)程序一旦進(jìn)入with/end with結(jié)構(gòu),with語(yǔ)句指定的對(duì)象就不能改變。因此不能用with語(yǔ)句來(lái)設(shè)置多個(gè)不同的對(duì)象。n = .a65536.end(xlup).row
8、'分別求出最大行號(hào)。 end和row都是屬性,此語(yǔ)句取得屬性值后賦值給變量n。此程序事先沒(méi)有對(duì)變量進(jìn)行聲明。在程序中取得對(duì)象的屬性的代碼結(jié)構(gòu):變量=對(duì)象·屬性。.range("a3:v" & n).copy activesheet.a65536.end(xlup).offset(1, 0) '取a2開(kāi)始到最后的數(shù)據(jù)copy到新表數(shù)據(jù)的下一行。n =.c65536.end(xlup) .row得到c列最后一個(gè)非空單元格所在的行號(hào),".offset(1, -2)"偏移"c65536.end(xlup)"得
9、到單元格的位置開(kāi)始復(fù)制后數(shù)據(jù)的粘貼位置。由c列移到a列。end withnextend sub注:在visual basic中要加入注釋?zhuān)苯釉谧⑨屛淖智凹由戏?hào)即可,在符號(hào)之后的文字會(huì)被編譯器忽略,也可以使用rem來(lái)進(jìn)行注釋?zhuān)褂梅?hào)會(huì)更快捷一些,還可以節(jié)省內(nèi)存及加快編譯的效率。如果當(dāng)前活動(dòng)工作表的a列填寫(xiě)的是學(xué)生的姓名,現(xiàn)在我們想在表中a列最后一個(gè)學(xué)生的后面增加一個(gè)叫“張青”的學(xué)生,則代碼為:代碼:activesheet.cells(a65536.end(xlup).row + 1, 1).value = "張青"“a65536.end(xlup).row”語(yǔ)句來(lái)返回
10、a列的最后一個(gè)非空單元格的行號(hào)sheet1.range("c1").end(xldown).row返回第一次遇到空單元格前的單元格的數(shù)量。(注:當(dāng)c列有空白單元格時(shí)用:myendrow=sheets("sheet1").range("c65536").end(xlup).row)a65536.end(xlup) 取得a列最后一個(gè)數(shù)據(jù)的位置本示例選定包含單元格 b4 的區(qū)域中 b 列頂端的單元格。range("b4").end(xlup).selectrange("b65536").end(xlu
11、p).row 問(wèn)題高手賜教其含義與區(qū)別range("a65536").end(xlup).rowrange("b65536").end(xlup).rowrange("d65536").end(xlup).rowrange("k65536").end(xlup).row看一下vba中end的幫助就知道了。end 屬性參閱應(yīng)用于示例特性返回一個(gè) range 對(duì)象,該對(duì)象代表包含源區(qū)域的區(qū)域尾端的單元格。等同于按鍵 end+ 向上鍵、end+ 向下鍵、end+ 向左鍵或 end+ 向右鍵。range 對(duì)象,只讀。exp
12、ression.end(direction)expression 必需。 該表達(dá)式返回“應(yīng)用于”列表中的對(duì)象之一。direction xldirection 類(lèi)型,必需。所要移動(dòng)的方向。xldirection 可為 xldirection 常量之一。 xldown xltoright xltoleft xlup 示例本示例選定包含單元格 b4 的區(qū)域中 b 列頂端的單元格。range("b4").end(xlup).select 本示例選定包含單元格 b4 的區(qū)域中第 4 行尾端的單元格。range("b4").end(xltoright).select
13、 本示例將選定區(qū)域從單元格 b4 延伸至第四行最后一個(gè)包含數(shù)據(jù)的單元格。worksheets("sheet1").activaterange("b4", range("b4").end(xltoright).selectrange("a65536").end(xlup).row a列數(shù)據(jù)區(qū)域最后一行的行號(hào)range("b65536").end(xlup).row b列數(shù)據(jù)區(qū)域最后一行的行號(hào)range("d65536").end(xlup).row d列數(shù)據(jù)區(qū)域最后一行的行號(hào)r
14、ange("k65536").end(xlup).row k列數(shù)據(jù)區(qū)域最后一行的行號(hào)range("a65536").end(xlup).rowa列第65536行之上的最后有數(shù)據(jù)的單元格所在行數(shù)回復(fù)range("b65536").end(xlup).row = b列最后一個(gè)非空單元格的行數(shù)range("a65536").end(xlup).row=a列最后一個(gè)非空單元格的行數(shù)range("b65536").end(xlup).row = b列最后一個(gè)非空單元格的行數(shù)range("d655
15、36").end(xlup).row = d列最后一個(gè)非空單元格的行數(shù)range("k65536").end(xlup).row= k列最后一個(gè)非空單元格的行數(shù)請(qǐng)教.end(xlup).row的含義?經(jīng)常在vba中常見(jiàn)如下代碼:dim rng as integerrng = sheets1.range代碼詳解定義rng作為一個(gè)整型變量'第二行的"sheets1"這種寫(xiě)法是錯(cuò)誤的.正確的表述方法應(yīng)為"sheet1"或"sheets(1)"sheet1,對(duì)工作表對(duì)象的稱(chēng)呼;range("a6
16、5536")指一個(gè)range對(duì)象,具體指第一列最后一行;end,range對(duì)象的end屬性,也返回一個(gè)對(duì)象,我理解為基于上述對(duì)象的延伸至最后一個(gè)range對(duì)象.具體延伸的方向要看它給出的參數(shù).比如xltoleft、xltoright、xlup 或 xldown。row返回區(qū)域中第一塊的第一行的行號(hào)。long 類(lèi)型,只讀多謝兩位高手指點(diǎn),看完以后我是這樣理解的,不知對(duì)否? range("a65536").end(xlup).row 是指第一列最后一個(gè)有數(shù)據(jù)單元格的行數(shù),它的下一行即加 1 就是3樓所說(shuō)的要添加數(shù)據(jù)的空
17、白單元格匯總工作表數(shù)據(jù)2010-06-03 00:44方法一:sub getdata()dim erow as integer, c as variant, serow as integererow = sheets("total").a65536.end(xlup).row + 1if erow > 4 then sheets("total").rows("4:" & erow).clearcontentsfor each c in thisworkbook.sheets if c.name <> &quo
18、t;total" then serow = c.a65536.end(xlup).row erow = sheets("total").a65536.end(xlup).row + 1 c.range("a4:l" & serow).copy destination:=sheets("total").range("a" & erow) end ifnext cend sub方法二sub sqlconbime()range("a4:l65536").clearconten
19、tsdim irow as integer, sqltemp as string, sql as string set cnn = createobject("adodb.connection") cnn.open "provider=microsoft.jet.oledb.4.0;extended properties=excel 8.0;data source=" & thisworkbook.fullname for each sh in sheets if sh.name <> "理數(shù)" then irow
20、 = sh.range("a3").end(xldown).row sqltemp = "select * from " & sh.name & "$a3:l" & irow & " order by 班別,座號(hào) " sql = sqltemp & "union " & sql end if next sql = left(sql, len(sql) - 6) sheets("理數(shù)").range("a4")
21、.copyfromrecordset cnn.execute(sql) cnn.close: set cnn = nothingend sub方法三sub conbimeall() dim yy as long yy = a65536.end(xlup).row + 1 range("a2:l" & yy).clearcontents set conn = createobject("adodb.connection") for i = 1 to 4 conn.open "provider=microsoft.jet.oledb.4.0
22、;extended properties=excel 8.0;data source=" & thisworkbook.fullname sq2 = "select * from " & range("p" & i) & "$a3:l1000 " a65536.end(xlup).offset(1, 0).copyfromrecordset conn.execute(sq2) conn.close next i set conn = nothingend sub把工作簿中的200多張表復(fù)制到一
23、張工作表里?(首選)我是做收款工作的,每天收款情況做一張表格,現(xiàn)在快一年了,今天老板突然要我把這9個(gè)月積累的每日數(shù)據(jù)全部反映到一張工作表上,其實(shí)點(diǎn)復(fù)制粘貼200多張表不是大問(wèn)題,主要是怕中途看花了眼,漏了或者重復(fù)了就很麻煩,請(qǐng)教高手幫忙,用公式或者vba,小弟感激不盡。右鍵點(diǎn)擊新工作表標(biāo)簽,選擇“查看代碼”,將下面的代碼粘貼到打開(kāi)的vbe窗口中:sub shcopy()dim nrow&, r1%, rs%, ls%&:長(zhǎng)整數(shù)型;%:整數(shù)型。r1 = 2 '每頁(yè)從第2行開(kāi)始復(fù)制(可修改)application.enableevents = false 如果對(duì)指定對(duì)象啟用
24、事件,則該值為 true。boolean 類(lèi)型,可讀寫(xiě)application.screenupdating = falsefor i = 2 to sheets.countsheets.count最后一張工作表。with sheets(i)rs = .usedrange.rows.count + 1 - r1 對(duì)于 worksheet 對(duì)象,rows 屬性返回代表指定工作表所有行的 range 對(duì)象。range 對(duì)象,只讀。工作表上已使用區(qū)域的行數(shù)。ls = .usedrange.columns.count count 屬性。描述:返回集合或 dictionary 對(duì)象中的條目數(shù)。只讀。語(yǔ)法:
25、object.count object 總是“應(yīng)用于”列表中某一項(xiàng)的名稱(chēng)。工作表上已使用區(qū)域的列數(shù)。arr = .range("a" & r1).resize(rs, ls)arr為變量,在vba中,變量無(wú)需聲明就可以直接使用,此時(shí)該變量為變體變量。resize 屬性。在excel中,resize 屬性的功能為調(diào)整指定區(qū)域的大小。返回 range 對(duì)象,該對(duì)象代表調(diào)整后的區(qū)域。 expression.resize(rowsize, columnsize) expression 必需。該表達(dá)式返回要調(diào)整大小的 range 對(duì)象。 rowsize variant 類(lèi)型,
26、可選。新區(qū)域中的行數(shù)。如果省略該參數(shù),則該區(qū)域中的行數(shù)保持不變。 columnsize variant類(lèi)型,可選。新區(qū)域中的列數(shù)。如果省略該參數(shù)。則該區(qū)域中的列數(shù)保持不變。range("a65536").end(xlup).offset(1).resize(rs, ls) = arrend withnextapplication.enableevents = trueapplication.screenupdating = trueend sub修改“開(kāi)始行號(hào)”。將光標(biāo)定位到代碼中間任意位置,按f5運(yùn)行它。關(guān)閉vbe窗口。注意單詞之間要用空格隔開(kāi)。excel多個(gè)工作簿中的工
27、作表合并到一個(gè)工作簿中 有時(shí),需要將多個(gè)excel工作簿中的工作表合并到一個(gè)工作簿中。有多種合并工作簿的情形,下面先給出一種合并多個(gè)工作簿的vba范例,供參考。(此方法將一個(gè)工作簿中所有的工作表復(fù)制到一張工作表上)方法1sub combineworkbooks()dim wk as workbookdim sh as worksheetdim strfilename as stringdim strfiledir as stringdim nm as stringnm = thisworkbook.namestrfiledir = thisworkbook.path & "&
28、quot;application.screenupdating = falsestrfilename = dir(strfiledir & "*.xls")do while strfilename <> vbnullstringif strfilename <> nm thenmsgbox strfilenameset wk = workbooks.open(filename:=strfiledir & strfilename, readonly:=true)strfilename = left(left(strfilename, l
29、en(strfilename) - 4), 29) '取主文件名,除掉.xlsfor each sh in wk.sheetssh.copy after:=thisworkbook.sheets(thisworkbook.sheets.count)'工作表命名,以工作表所在文件名為類(lèi)if wk.sheets.count > 1 thenthisworkbook.sheets(thisworkbook.sheets.count).name = strfilename & sh.nameelsethisworkbook.sheets(thisworkbook.shee
30、ts.count).name = strfilenameend ifnextwk.close savechanges:=falseend ifstrfilename = dirloopapplication.screenupdating = trueend sub方法2sub unworksheets()application.screenupdating = falsedim lj as stringdim dirname as stringdim nm as stringdim sname as stringdim i as integer, ii as integerlj = activ
31、eworkbook.pathnm = activeworkbook.namedirname = dir(lj & "*.xls") '查找文件do while dirname <> ""if dirname <> nm thenworkbooks.open filename:=lj & "" & dirname '打開(kāi)文件ii = activeworkbook.sheets.count '統(tǒng)計(jì)工作表個(gè)數(shù)'復(fù)制新打開(kāi)工作簿的每一個(gè)工作表到當(dāng)前工作表(afte
32、r:=thisworkbook.sheets(thisworkbook.sheets.count)最后一個(gè)后面for i = 1 to iiworkbooks(dirname).sheets(i).copy after:=thisworkbook.sheets(thisworkbook.sheets.count)nextworkbooks(dirname).close falseend ifdirname = dirloopend sub在同一文件夾下有多個(gè)工作簿,其中有一個(gè)用于匯總的工作簿,將除該匯總工作簿外的其它工作簿中的每一張工作表的數(shù)據(jù)匯總到該匯總工作簿的一張工作表中。好用!sub u
33、nionworksheets()application.screenupdating = false關(guān)閉屏幕更新dim lj as string dim dirname as stringdim nm as stringdim i as integer, ii as integerlj = activeworkbook.path path 屬性。返回指定文件、文件夾、或驅(qū)動(dòng)器的路徑。nm = activeworkbook.name name屬性。指定一個(gè)控件或?qū)ο蟮拿Q(chēng)或與 font 對(duì)象相關(guān)的字體的名稱(chēng)。變量賦值使用=“等號(hào)”,“=”后的值可以是單純的數(shù)值、字符串或表達(dá)式。dirname =
34、 dir(lj & "*.xls") dir 函數(shù)。返回一個(gè)string,用以表示一個(gè)文件名、目錄名或文件夾名稱(chēng),它必須與指定的模式或文件屬性、或磁盤(pán)卷標(biāo)相匹配。cells.clear clear 方法。清除 err 對(duì)象的所有屬性設(shè)置。do while dirname <> ""前置式doloop循環(huán)。if dirname <> nm thenworkbooks.open filename:=lj & "" & dirname open 方法?!?lt;>”為比較運(yùn)算符“不等于”
35、。ii = activeworkbook.sheets.count sheets 屬性workbooks(nm).activate activate方法。workbooks(nm)屬使用工作簿名稱(chēng)引用workbook,語(yǔ)法格式為:workbook( 工作簿名稱(chēng))。'復(fù)制新打開(kāi)工作簿的每一個(gè)工作表的已用區(qū)域到當(dāng)前工作表for i = 1 to iiworkbooks(dirname).sheets(i).usedrange.copy _range("a65536").end(xlup).offset(2, 0) usedrange 屬性。返回代表指定工作表上已使用區(qū)域
36、的 range 對(duì)象。只讀nextworkbooks(dirname).close false close 方法。關(guān)閉一個(gè)打開(kāi)的 textstream 文件。語(yǔ)法:object.close object始終是一個(gè) textstream 對(duì)象的名字end ifdirname = dirloopend sub如何利用vba將多工作表的數(shù)據(jù)匯總而不復(fù)制標(biāo)題?a:將sheet2工作表中待復(fù)制的數(shù)據(jù)定義為“表1”,將sheet3工作表中待復(fù)制的數(shù)據(jù)定義為“表2”alt+f11新建模塊,并輸入如下代碼 sub 利用表僅復(fù)制數(shù)據(jù)()dim sh as worksheet, ifor each sh in w
37、orksheetsif sh.name <> "sheet1" then i = i + 1 range("表" & i).copy sheets("sheet1").range("a65536").end(xlup).offset(1, 0)end ifnext shend sub如何將多個(gè)工作簿中的工作表一次性合s 問(wèn)題:如何將多個(gè)工作簿中的工作表一次性合s答案: 關(guān)于如何將多個(gè)工作簿(xls文件)中的工作表(worksheet)復(fù)制到同一個(gè)工作簿中的解決。下面的代碼可以將某個(gè)磁盤(pán)目錄下的多
38、個(gè)xls文件的復(fù)制到含有這段代碼的xls文件中,而且xls文件可以根據(jù)處理worksheet的數(shù)量自動(dòng)的增加xls文件中worksheet的數(shù)量。使用時(shí)將代碼復(fù)制到xls文件的宏內(nèi),然后運(yùn)行宏main即可。代碼中運(yùn)用了filesystemobject對(duì)象和excel的range對(duì)象的copy方法以及worksheet和workbook對(duì)象的add方法。這里就不在贅述,可以在excel vba的幫助中找到。sub mergesheet(byval spath as string)dim fs, fd, fl as objectdim xlbook as workbookdim xlsheet a
39、s worksheetdim i_cnt as integeri_cnt = 1set fs = createobject("scripting.filesystemobject") '建立filesystemobjectif not fs.folderexists(spath) thenmsgbox "目錄不存在!", vbcriticalexit subend ifset fd = fs.getfolder(spath) '或取文件夾for each fl in fd.files '依此處理文件夾中的文件if right(tr
40、im(fl.name), 3) = "xls" then '只處理xls文件set xlbook = application.workbooks.open(spath "" fl.name) '打開(kāi)xls文件if i_cnt <> 3 then '默認(rèn)的worksheet數(shù)量是3,如果超過(guò)就自動(dòng)的增加set xlsheet = application.workbooks(1).worksheets.addelseset xlsheet = application.workbooks(1).worksheets(i_cn
41、t)end ifxlbook.worksheets(1).rows.copy xlsheet.cells(1, 1) '復(fù)制worksheeti_cnt = i_cnt 1xlbook.close '關(guān)閉已經(jīng)打開(kāi)的xls文件end ifnextset fl = nothing '關(guān)閉file,folder,filesystemobject對(duì)象set fd = nothingset fs = nothingend subsub main()dim spath as stringspath = inputbox("請(qǐng)輸入目錄!如c:", "合并
42、目錄下xls文件的sheet1") '顯示輸入框獲取磁盤(pán)目錄if spath = " " then exit submergesheet (spath)end sub 主題:求助多個(gè)工作簿中的工作表數(shù)據(jù)匯總到另一個(gè)工作簿中 回復(fù)subbb()workbooks.openfilename:="d:數(shù)據(jù)匯總"&sheets("目錄").range("e1")dimxshasworksheetdimiaslong,jaslongsheets("按鋼筋種類(lèi)匯總").select
43、setxsh=sheets("按鋼筋種類(lèi)匯總")j=worksheetfunction.match("d",xsh.range("d:d")xsh.range("a2:q"&j).copywindows("指定目錄下文件名.xls").activatesheets("匯總目錄").selectrange("a65536").end(xlup).offset(1,0).pastespecialpaste:=xlpastevaluesapplicati
44、on.cutcopymode=false b=sheets("目錄").range("e1").valuewindows(b).activateactivewindow.closeendsub如何將多張excel工作表批量復(fù)制到一個(gè)表中 一個(gè)表中有若干個(gè)sheet,表頭都是一樣的,我需要把這若干個(gè)sheet合并到一個(gè)sheet里面,單純的復(fù)制粘貼太麻煩了,表格太多。請(qǐng)問(wèn)誰(shuí)能告訴我個(gè)簡(jiǎn)單的方法,最好能有個(gè)宏能處理,方便的話發(fā)個(gè)宏到我郵箱里面。比較簡(jiǎn)單,我正好以前回答過(guò)。你參考一下。復(fù)制下面代碼到一個(gè)宏里運(yùn)行就可以了。 可以根據(jù)注釋修改相應(yīng)數(shù)字 dim ro
45、windex as integer dim refcol as integer dim subrowindex as integer dim subcolindex as integer rowindex = 1 '主表從第二行開(kāi)始 refcol = 1 '主表從第二列開(kāi)始 for sheetindex = 1 to 100 '100個(gè)sheet 循環(huán) subrowindex = 1 do '假設(shè)匯總至"sheetmain" for subcolindex = 1 to 10 '子表從第一列開(kāi)始,共10列 worksheets(&qu
46、ot;sheetmain").cells(rowindex, subcolindex + refcol) = worksheets("sheet" & sheetindex).cells(subrowindex, subcolindex).value '實(shí)際操作賦值語(yǔ)句 next subcolindex subrowindex = subrowindex + 1 rowindex = rowindex + 1 loop while worksheets("sheet" & sheetindex).cells(subrow
47、index, 1) <> "" '子表第一列為空時(shí)跳出 next sheetindex 一個(gè)工作薄中有70個(gè)工作表,且所有工作表是完全相同的,問(wèn)題是如何把后面所有工作表中相同位置處的數(shù)字引用到表1中同一列中?即在表1一個(gè)單元格中出現(xiàn)這個(gè)數(shù)據(jù),然后下拉就能出現(xiàn)所有工作表中的那個(gè)特定數(shù)據(jù)? 問(wèn)題補(bǔ)充:我的是工資表,因?yàn)楹枚鄸|西比較復(fù)雜,所以每個(gè)人都單獨(dú)列了一個(gè)工作表,但格式都是一樣的,現(xiàn)在我想提取出每個(gè)工作表中相同單元格的數(shù)量,用公式只能提出一張表的數(shù)據(jù),下拉就會(huì)變,怎么辦?最佳答案假設(shè)你要引用的是另外70個(gè)不同表中d4這個(gè)單元格。1.新建表“匯總”,在第一
48、列a1輸入"工號(hào)"a2至a71錄入70個(gè)表的名字。2.第二列b2單元格輸入公式:“=indirect(concatenate(a2,"!d4")”,公式的意思是引用“匯總”表a2單元格相同的表中d4單元格的內(nèi)容。(假設(shè)a2=王小明,則引用表“王小明”里的d4單元格的值)3.拖拽b2的右下角自動(dòng)生成一列對(duì)70個(gè)表對(duì)應(yīng)單元格格的引用了,其他的引申就自己開(kāi)發(fā)了,公式可以結(jié)合其他運(yùn)算的。以上方法我自己摸索出來(lái)的,不保證最高效,但還算好用。 excel sheet中數(shù)據(jù)的快速?gòu)?fù)制 '利用copymemory 復(fù)制數(shù)組,實(shí)現(xiàn)excel sheet中數(shù)據(jù)的任意
49、復(fù)制,粘貼區(qū)域小于復(fù)制區(qū)域,數(shù)據(jù)將被截取,否則將用空格填充private declare sub copymemory lib "kernel32" alias "rtlmovememory" (pdst as any, psrc as any, byval bytelen as long)sub copyrange(byval src as range, byval dest as range) ' copy all data from src to destdim arrsrc(), arrdest()arrsrc = srcarrdest
50、= destredim arrdest(1 to dest.rows.count, 1 to dest.columns.count)copymemory byval varptr(arrdest(1, 1), byval varptr(arrsrc(1, 1), 16 * src.rows.count * src.columns.countdest = arrdesterase arrsrcerase arrdestend subsub xxx() '將a1:c100 區(qū)域數(shù)據(jù)復(fù)制到d3:h40copyrange range("a1:c100"), range(&q
51、uot;d3:h40")end sub100多張工作表的有關(guān)內(nèi)容如何批量復(fù)制在一張表上sub tt()application.screenupdating = falsedim xrows("2:" & a65536.end(xlup).row + 1).clear for x = 1 to sheets.count with sheets("都要復(fù)制到這張表上") if sheets(x).name <> "都要復(fù)制到這張表上" then sheets(x).range("a8",
52、"h25").copy .range("a" & .a65536.end(xlup).row + 1) "都要復(fù)制到這張表上"是工作表名, "a8", "h25"是復(fù)制區(qū)域。 end with next xend sub如何利用vba將多工作表的數(shù)據(jù)匯總而不復(fù)制標(biāo)題?a:將sheet2工作表中待復(fù)制的數(shù)據(jù)定義為“表1”,將sheet3工作表中待復(fù)制的數(shù)據(jù)定義為“表2”alt+f11新建模塊,并輸入如下代碼sub 利用表僅復(fù)制數(shù)據(jù)()dim sh as worksheet, ifor ea
53、ch sh in worksheetsif sh.name <> "sheet1" theni = i + 1range("表" & i).copy sheets("sheet1").range("a65536").end(xlup).offset(1, 0)end ifnext shend sub快速移動(dòng)、復(fù)制excel工作表技巧在excel 2000中,有時(shí)需要將一個(gè)或一組工作表從一個(gè)工作簿(源工作簿)中移動(dòng)或者復(fù)制到另一個(gè)工作簿(目標(biāo)工作簿)中,這時(shí)我們可以采用如下的方法實(shí)現(xiàn)快速移動(dòng)或者復(fù)制工作表的操作。一、快捷菜單法1.打開(kāi)源工作簿(工作1.xls)和目標(biāo)工作簿(工作2.xls),在源工作簿中選定一個(gè)或一組工作表(單擊第一個(gè)工作表標(biāo)簽、按下shift鍵,然后單擊最后一個(gè)工作表標(biāo)簽,或在單擊不相鄰的工作表標(biāo)簽時(shí)按下ctrl鍵)。2.在源工作簿
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東科學(xué)技術(shù)職業(yè)學(xué)院《醫(yī)學(xué)生物化學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東金融學(xué)院《農(nóng)業(yè)技術(shù)經(jīng)濟(jì)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東環(huán)境保護(hù)工程職業(yè)學(xué)院《中學(xué)語(yǔ)文經(jīng)典新詩(shī)解讀》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東行政職業(yè)學(xué)院《護(hù)理學(xué)基礎(chǔ)實(shí)驗(yàn)(1)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東工貿(mào)職業(yè)技術(shù)學(xué)院《大數(shù)據(jù)原理與技術(shù)課程設(shè)計(jì)》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東東軟學(xué)院《儒學(xué)與傳統(tǒng)文化》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東創(chuàng)新科技職業(yè)學(xué)院《軟件工程A》2023-2024學(xué)年第一學(xué)期期末試卷
- 《口腔護(hù)理崗前培訓(xùn)》課件
- 《流程圖的排版規(guī)則》課件
- 公證書(shū) 仲裁文書(shū)
- 藍(lán)色卡通風(fēng)胃腸減壓護(hù)理
- 2024年天津市中考語(yǔ)文試卷真題(含答案)
- 小學(xué)單位換算-體積
- 叉車(chē)自行檢查記錄表
- 2024新安全生產(chǎn)法知識(shí)考試題庫(kù)及答案大全
- 專(zhuān)題5 書(shū)面表達(dá)-2023-2024學(xué)年譯林版五年級(jí)上冊(cè)英語(yǔ)期末專(zhuān)題復(fù)習(xí)
- 2024年中國(guó)科學(xué)技術(shù)大學(xué)創(chuàng)新班物理試題答案詳解
- 江西省萍鄉(xiāng)市2022-2023學(xué)年高一年級(jí)上冊(cè)期末考試數(shù)學(xué)試題
- 《調(diào)水工程設(shè)計(jì)導(dǎo)則SL-T430-20XX-條文說(shuō)明》
- 第二單元自測(cè)卷(試題)2023-2024學(xué)年統(tǒng)編版語(yǔ)文四年級(jí)下冊(cè)
- 土方開(kāi)挖過(guò)程中的文物保存方案
評(píng)論
0/150
提交評(píng)論