我有一个从excel打开的程序生成的报告,类似于下面的图像
我一直在使用此代码来总结金额:
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
答案 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
列中的空白值,以获得结果。