动态列和动态行的自动求和循环工作表和循环工作簿

Autosum for dynamic columns and dynamic rows loop thru sheet and loop workbook

提问人:memo 提问时间:11/10/2023 最后编辑:Mayukh Bhattacharyamemo 更新时间:11/11/2023 访问量:26

问:

我有一个固定的损益表,需要所有总单元格的公式。

我需要一个 vba 代码: 首先,自动求和(左边两个单元格)Jan Total 列,将公式向下复制到最后一行 total (Cost of Goods Sold Total);下一个自动求和(左边四个单元格)2 月 Total 列,将公式向下复制到最后一行 total (Cost of Goods Sold Total),根据需要循环多次。下一个自动求和总计列(1 月、2 月、3 月等的单元格值)。

接下来,在A列中,找到第一个带有“总计”的单元格,在单元格上方自动求和,复制公式并粘贴到右端。循环到最后一行(总销售成本)

最后,对工作簿中的每个工作表(x,y,z等)重复上述操作。

enter image description here

对于列,我手动自动求和列,复制,粘贴公式。 对于行,我得到了第一个需要自动求和的单元格。

Selection.Copy
Range(Selection, Selection.End(xlToRight)).Select
Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False
ActiveCell.Offset(0, -1).Range("A1").Select
Cells.Find(What:="total", After:=ActiveCell, LookIn:=xlFormulas2, LookAt _
    :=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
    False, SearchFormat:=False).Activate
ActiveCell.Offset(0, 1).Range("A1").Select

这可行,但很耗时。

Excel VBA while-loop 嵌套

评论


答:

1赞 taller 11/11/2023 #1

这是应用公式的代码。columns

我不确定逻辑是什么.例如:总收入autosum above cells

Option Explicit

Sub AutoColSum()
    Dim i As Long, aMth(1 To 12) As String
    Dim lastRow As Long, c As Range, ColCnt As Long
    Dim ColRng As Range, SumRng As Range
    Const HEADER_ROW = 4
    Const GRAND = "Grand Total"
    For i = 1 To 12
        aMth(i) = Format(DateSerial(2023, i, 1), "MMM yyyy Total")
    Next
    lastRow = Cells(Rows.Count, 1).End(xlUp).Row
    If lastRow > HEADER_ROW + 1 Then
        For i = 1 To 12
            Set c = Range(HEADER_ROW & ":" & HEADER_ROW + 1).Find(What:=aMth(i), LookIn:=xlValues, _
                LookAt:=xlWhole, MatchCase:=False, SearchFormat:=False)
            If Not c Is Nothing Then
                If i = 1 Then
                    Set SumRng = c.Offset(2)
                Else
                    Set SumRng = Union(SumRng, c.Offset(2))
                End If
                ColCnt = IIf(i = 1, 2, 4)
                Set ColRng = Range(Cells(HEADER_ROW + 2, c.Column), Cells(lastRow, c.Column))
                ColRng.FormulaR1C1 = "=SUM(RC[-" & ColCnt & "]:RC[-1])"
            End If
        Next
        Set c = Cells(HEADER_ROW, Columns.Count).End(xlToLeft)
        If StrComp(c.Value, GRAND, vbTextCompare) = 0 Then
            Set ColRng = Range(Cells(HEADER_ROW + 2, c.Column), Cells(lastRow, c.Column))
            ColRng.Formula = "=SUM(" & SumRng.Address(0, 0) & ")"
        End If
    End If
End Sub