首页 > 解决方案 > 如何打开多个工作表,将每个工作表中的列相加并保存?

问题描述

我试图为我的论文在 excel 中编写一个宏。我在一个文件夹中有多个 .xlsx 文件,每个文件都包含一个包含 9 列 (AI) 和不同行数的表。我想自动打开每个文件,在每列底部添加列的总和,然后保存文件。

我在堆栈溢出中找到了一个代码来选择一个包含 .csv 文件的文件夹,这些文件会自动打开并保存为同一文件夹中的 .xlsx 文件。我试图为我的目的修改代码。我唯一实现的就是更改代码以打开我文件夹的 .xlsx 文件。从那时起,我不知道如何继续,因为我对 VBA 没有任何经验。GetFolder() 是一个定义函数,它允许我浏览文件夹并找出它的路径。

私有子 CommandButton1_Click()

Dim myFolder As String
Dim getBook As String
Dim myCSVFile As String
Dim LastRow As Long


Application.DisplayAlerts = False
myFolder = GetFolder()
myXLSXFile = Dir(myFolder & "\*.xlsx")

Do While myXLSXFile <> ""
    Workbooks.Open Filename:=myFolder & "\" & myXLSXFile
    getBook = ActiveSheet.Name
    ActiveSheet.Name = "Sheet1"
我认为此时在列末尾添加总和的代码应该是但我不确定
    ActiveWorkbook.SaveAs Filename:=myFolder & Chr(92) & getBook, FileFormat:=51
    ActiveWorkbook.Close False
    myXLSXFile = Dir
Loop

结束子

标签: excelvba

解决方案


欢迎来到 SO :

总结你的专栏,你可能会使用这样的东西

SumA = Application.WorksheetFunction.Sum(columns("A:A"))

并将其放在每列的末尾,您将:

1 找到列的最后一行

lastrow = ActiveSheet.Cells(sht.Rows.Count, "A").End(xlUp).Row

2 将总和值存储到 las 单元格列中

Cells(lastrow,"A").value = SumA 

您要做的最后一件事是对所有列进行循环并浏览所有文件:

编辑代码

Private Sub CommandButton1_Click()

Dim directory As String, fileName As String, sheet As Worksheet, i     As Integer, j As Integer
Application.ScreenUpdating = False
directory = "C:\Users\ba-sc\Desktop\Fiji output\"
fileName = Dir(directory & "*.xl??")
Do While fileName <> ""

Workbooks.Open (directory & fileName)

Set sht = Workbooks(fileName).Worksheets("Sheet1")

LastColumn = Workbooks(fileName).Worksheets("Sheet1").Cells(1,Workbooks(fileName).Worksheets("Sheet1").Columns.Count).End(xlToLeft).Column

For i = 1 To LastColumn

SumA = Application.WorksheetFunction.Sum(Workbooks(fileName).Worksheets("Sheet1").Columns(i))
MsgBox SumA
lastrow = ActiveSheet.Cells(Workbooks(fileName).Worksheets("Sheet1").Rows.Count, i).End(xlUp).Row

Workbooks(fileName).Worksheets("Sheet1").Cells(lastrow + 1, i).Value = SumA

Next

'now save and close this workbook

Workbooks(fileName).Close SaveChanges:=True

fileName = Dir()

Loop

End Sub

输出 :

在此处输入图像描述


推荐阅读