跳过一行,再次开始汇总过程

时间:2017-10-11 16:17:14

标签: excel excel-vba vba

我有一个从excel打开的程序生成的报告,类似于下面的图像

spreadsheet

我一直在使用此代码来总结金额:

Sub SumTotals()

lastrow = Sheets("sheet1").Cells(Rows.Count, 2).End(xlUp).Row
Range("b" & lastrow + 1) = WorksheetFunction.Sum(Sheets("sheet1").Range("b2:b" & lastrow))
Range("a" & lastrow + 1) = Cells(1, 1)
Range("a1:b" & lastrow).Select
Selection.Delete Shift:=xlUp

End Sub

我遇到的问题是代码对公司A和公司B以及最终结果进行了总结

  

公司A 5,625.07

我想要完成的是

  

公司A 2,053.73

     

公司B 3,571.34

当我收到这些报告时,通常有100多家公司,所以如果我能加快这个过程,那将是非常有益的。

我怀疑第一行代码是问题

lastrow = Sheets("sheet1").Cells(Rows.Count, 2).End(xlUp).Row

因为这会将结尾放在单元格B8而不是B3。我试图弄清楚如何将第一列数字相加到第一个空白行,然后继续执行下面的数字并执行相同的过程。任何建议表示赞赏。

理想的最终结果 Ideal result

2 个答案:

答案 0 :(得分:0)

试试这个

Sub x()

Dim r As Range

For Each r In Columns(2).SpecialCells(xlCellTypeConstants).Areas
    r(r.Count + 1).Value = Application.Sum(r)
    r(r.Count + 1).Offset(, -1).Value = r(1).Offset(, -1).Value
    r.EntireRow.Delete shift:=xlUp
Next r

End Sub

答案 1 :(得分:0)

您也可以尝试这种非VBA方法。在单元格public static void Start() { DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule)); DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule)); Bootstrapper.Initialize(CreateKernel); } 中输入此公式=IF(A1<>"",SUM(OFFSET(B1,0,0,MIN(IF(B1:B80="",ROW(B1:B80))))),""),以便在空白行之前对所有值求和。将公式拖到值的底部。由于它是一个数组公式,您必须使用CTRL + SHIFT + ENTER输入它。然后,您可以过滤掉C1列中的空白值,以获得结果。

enter image description here