查找最后一行并汇总多个列

时间:2017-08-24 01:18:50

标签: excel vba excel-vba

我正在创建一个新宏,以便从我们每两周使用一次的下载中启用自定义报告。

我使用其中一个下载录制了宏,这给了我所需要的一切,除了我的最后一篇。

我需要找到最后一行,向下一行,然后对J,K,L和M列求和。然后在“I”列中,“Total”一词应位于同一行。

为了清楚起见,我想从J2:Jxxx求和列J,其中xxx是最后一行。

每次下载此报告时,行数都会有所不同,因此我不能将静态行号用作公式的一部分。

我需要知道如何写这个,我已经搜索了几个论坛和Excel网站来获得这个,但没有任何效果。此外,这可以通过一组代码覆盖所有列的方式完成,还是必须为每列重复?

以下是我的代码(请记住,现在这是我尝试在一天中在网上找到的各种帮助的大杂烩):

EndRowI = Range(I65536).End(xlUp).Row

.Sheets(x).Range("I" & EndRowI + 1).Formula = "=SUM(I2:I" & EndRowI & ")"

EndRowH = Range("H" & Rows.Count).End(xlUp).Row

Range("H" & LR + 1).FormulaR1C1 = "Total"

对于它的价值,我的工作表的名称是“合并”,这是我宏观中的较早步骤。

谢谢!

1 个答案:

答案 0 :(得分:1)

*请更正您的工作表名称,因为我的示例引用Sheet1中的ThisWorkbook

此代码查找J:M列范围的最大行数,然后对每列求和,并在最大行号显示它们,其HOT列中的TOTAL标题。 (由于你的问题不是那么清楚,我试图根据你的意见弄清楚这一点。)

Option Explicit

Sub SubUntilLastRow()
Dim CurCal As XlCalculation
Dim wb As Workbook, ws As Worksheet, colsLastRow As Long
Dim cols As Variant, SumCols As Long, colsArray As Variant
Dim biggestRow As Long

Application.ScreenUpdating = False
CurCal = Application.Calculation
Application.Calculation = xlCalculationManual

biggestRow = 1

Set wb = ThisWorkbook
Set ws = wb.Sheets("Sheet1")

colsArray = Array("J", "K", "L", "M")

For Each cols In colsArray
colsLastRow = ws.Cells(Rows.Count, cols).End(xlUp).Row
If colsLastRow > biggestRow Then
biggestRow = colsLastRow + 1
End If
Next cols

For Each cols In colsArray
colsLastRow = ws.Cells(Rows.Count, cols).End(xlUp).Row
ws.Cells(biggestRow, cols).Formula = "=SUM(" & cols & "2:" & cols & colsLastRow & ")"
Next cols

ws.Range("H" & biggestRow).Value = "TOTAL"

Application.ScreenUpdating = True
Application.Calculation = CurCal


End Sub