这个可以用宏程序实现,以下是当年做项目请教excelhome大神的结果:
首先将要读取的excel表格放到一个文件夹中,然后将我附件的excel表格放到此文件中打开
用VBA去遍历这个文件夹中的所有表格,得到文件名和地址放到excel中,
Sub 汇总_Click()Dim xlsFile As StringDim iRow As Long, i As LongOn Error GoTo errHeadleriRow = Range("A" & Rows.Count).End(xlUp).RowxlsFile = Dir(ActiveWorkbook.Path & "/*.xls")Do If InStr(1, xlsFile, "汇总") = 0 Then i = i + 1 Range("A" & iRow + i) = xlsFile Range("B" & iRow + i) = ActiveWorkbook.Path & "\" End If xlsFile = DirLoop Until Len(xlsFile) = 0extSub: Exit Sub errHeadler: MsgBox "抱歉,程序运行时发生意外!请联系作者。", , "提示" Resume extSub End Sub这个时候VBA的使命完成
剩下的就是excel的公式技巧了,“地址&文件名&表名&单元地址”就是你要的结果了,不过我用了 ' 之后做了一步替换操作才显示出值,原因是excel如果不打开的情况下是无法直接更新值的。
完整的东东看附件吧
举例·:一个excel文件,里面有一百多个工作表,但工作表名称没有规则顺序,不是按照sheet1、sheet2这样的顺序排列,现在需要把每个工作表里的A3数据提取出来,组成新的一列。 解决方法:用宏自定义函数 同时按Alt和F11进入宏界面,点菜单的插入,塻块,粘贴如下代码: Function AllSh(xStr As String, i As Integer) Application.Volatile AllSh = Sheets(i).Range(xStr).Value End Function 回到excel,在任意单元格输入=allsh("A3",ROW(A1)) 公式向下复制。