首页 > 解决方案 > 如何创建一个对任意数量的行进行小计并将总计放在正确的行中的宏?

问题描述

我每个月都会做一次合并发票,我们从在线同步和格式化。我想自动化格式,我有;但是,我无法将行从一张发票更改为下一张,因为它们永远不会相同。一个可能是 195 行,另一个可能是 320 行。

例如,在这部分中,我需要在 D 列中排序,但并不总是到第 272 行。我怎样才能让它搜索到需要的任何点?

ActiveWorkbook.Worksheets("invoicedetails").Sort.SortFields.Add Key:=Range( _
    "D2:D272"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
    xlSortNormal

ActiveCell.Offset(0, -16).Range("A1:P121").Select
Selection.Subtotal GroupBy:=4, Function:=xlSum, TotalList:=Array(16), _
    Replace:=True, PageBreaks:=False, SummaryBelowData:=True

ActiveCell.Offset(0, 3).Columns("A:A").EntireColumn.Select
Selection.AutoFilter
Selection.AutoFilter
ActiveSheet.Range("$D$1:$D$181").AutoFilter Field:=1, Criteria1:=Array( _
    "3821463 Total", "3827540 Total", "3827541 Total", "3827543 Total", "3827544 Total" _
    , "3827556 Total", "3827558 Total", "3827559 Total", "3827560 Total", _
    "3827562 Total", "3827563 Total", "3827564 Total", "3827576 Total", "3827577 Total" _
    , "3827579 Total", "3827580 Total", "3827581 Total", "3827583 Total", _
    "3827584 Total", "3827596 Total", "3848953 Total", "3848980 Total", "3850398 Total" _
    , "3850421 Total", "3863863 Total", "3863864 Total", "3904249 Total", "Grand Total") _
    , Operator:=xlFilterValues

这是当我对总计进行小计并且总计打印大约 30 行时记录的内容

标签: excelvbaautomation

解决方案


只要 D 列内部没有空格,您就可以使用Range("D1").End(xlDown)(End.Down) 之类的东西,相当于按 Ctrl + Down) 这将返回 Excel 表格中包含数据的最后一个单元格。

Range("D1").End(xlDown).Row将返回您需要使用的行号

如果 D 列中确实有空单元格,您还可以使用每行都有数据的标识符列来获取该行。

然后,您可以通过简单地连接它来更改范围以包含该行,如下所示:Range("D1:D" & Range("D1").End(xlDown))

这不是最优雅的解决方案,但对我来说,它对于类似问题来说是最可靠的。您也可以查看 CurrentRegion 和 UBound 属性,它们也可以提供帮助,但正如我所说,我发现 End 工作得最好


推荐阅读