如何通过VBA代码将N个EXCEL表的文件中SHEET1的A列数据汇总到一个表上
发布网友
发布时间:2022-05-10 05:22
我来回答
共3个回答
热心网友
时间:2023-11-05 08:57
昨天回答了,答案被度娘吃了
今天再来过:
一、
首先把你的那几个EXCEL文件复制到同一个目录下,全选,按F2,把第一个文件重命名为
(0).xls,这样你所有的文件就都变为这个形式的了
(0).xls,(1).xls,(2).xls,(3).xls,......
二、新建一个excel文档,录制一个宏,什么都不做就结束录制,然后把这个宏的代码改成如下样子:
Sub Macro1()
'
' Macro1 Macro
' 宏由 Jal.You 录制,时间: 2011/10/11
'
' 快捷键: Ctrl+j
'
Dim tmpname, dir, selfname
Dim nRow, nCur, i, j
nCur = 1
selfname = ActiveWorkbook.name
dir = ActiveWorkbook.Path & "\"
For i = 0 To 6 '把这句话改成你实际的文件数量,如(0).xls......(100).xls,就改成For i = 0 To 100
tmpname = "(" & i & ").xls"
Workbooks.Open dir & tmpname
nRow = Workbooks(tmpname).Sheets("sheet1").Range("A65535").End(xlUp).Row
For j = 1 To nRow
Workbooks(selfname).Sheets("sheet1").Range("A" & nCur).Value = Workbooks(tmpname).Sheets("sheet1").Range("A" & j).Value
nCur = nCur + 1
Next j
Workbooks(tmpname).Close
Next i
End Sub追问我将文件名称依次命名为1.xls,2.xls......31.xls
将语句 for i=0 to 6
改写为 FOR I=1 TO 31 后
tmpname = "(" & i & ").xls"
改写为tmpname = i & ".xls"
运行宏的时候提示“下标越界”,请问是改写得不对还是什么原因
追答你开着VBA 运行,出错时点调试看程序停在哪一行
或者打个包发我邮箱kbr002@163.com
热心网友
时间:2023-11-05 08:57
1、你的意思是说有N个工作簿,每个工作簿的sheet1.........,希望在另外一个单独的工作簿中的sheet1的列汇总数据?
2、这个汇总工作簿的a列要一个总的汇总数据,还是每一行显示一个工作簿的汇总?譬如A1显示工作簿1的汇总,a2显示工作簿2的汇总......An显示工作簿n的汇总
3、工作簿个数固定吗?还是一直在变动,例如今天3个明天5个后天8个?如果这样的话,用vba需要你工作簿的名字有一定的规律。
4、这点事情,还是采纳 lapi5367 的建议,用公式吧,行数多,会有1万行嘛?要不10万行?你看着自己做吧
book1:A10000=sum(a1:a9999)
book2:A10000=sum(a1:a9999)
book3:A10000=sum(a1:a9999)
...........
bookn:A10000=sum(a1:a9999)
NEWbook:A1=[book1.xls]Sheet1!$a$10000
A2=[book2.xls]Sheet1!$a$10000
A3=[book3.xls]Sheet1!$a$10000
..........
An=[bookn.xls]Sheet1!$a$10000
An+1=sum(A1:An)
热心网友
时间:2023-11-05 08:58
sub tj()
'如果文件名称没有规律,可以试试如下代码,前提是所有文件在同一个文件夹里,
dir = ActiveWorkbook.Path & "\"
With Application.FileSearch
.NewSearch
.FileType = msoFileTypeWordDocuments
.LookIn = ThisWorkbook.Path
.SearchSubFolders = True
If .Execute <> 0 Then
ReDim 文件名集(.FoundFiles.Count)
kkd=0
For lngCount = 1 To .FoundFiles.Count
if instr( .FoundFiles.Item(lngCount),".xls) >0 then
文件名集(kkd) = .FoundFiles.Item(lngCount)
kkd=kkd+1
Next lngCount
End If
lngCount = .FoundFiles.Count - 1
End With
For i = 0 To kkd'以下是复制于2011-10-12 18:29 jalyou的回答 | 四级
Workbooks.Open dir & tmpname
nRow = Workbooks(tmpname).Sheets("sheet1").Range("A65535").End(xlUp).Row
For j = 1 To nRow
Workbooks(selfname).Sheets("sheet1").Range("A" & nCur).Value = Workbooks(tmpname).Sheets("sheet1").Range("A" & j).Value
nCur = nCur + 1
Next j
Workbooks(tmpname).Close
next
end sub