Excel VBA增量列总结和更新

我试图编写一个For循环来总结增量列并检查一个总值。

如果总和列G + H + I + …(最后一列)<列AG,则将列G,H,I …更新为0

如果column> column AG的总和那么最后一个在summation中使用的active列=所有列的总和减去column AG。 请参考图片,以黄色突出显示的单元格显示预期的macros。

为了使macros运行更快,主代码被写入嵌套如果当列AG> 0运行主代码

图片1 图片2

Sub Test() Application.ScreenUpdating = False Set dm = Worksheets("a") Set CTOT = dm.Columns("AG") dm.Activate lastcol = dm.Cells(1, Columns.Count).End(xlToLeft).Column fz = dm.Range("C" & Rows.Count).End(xlUp).Row For i = 3 To fz inventory = CTOT.Cells(i, 1).Value If inventory > 0 Then For j = 7 To lastcol sumdm = Application.WorksheetFunction.Sum(dm.Range(Cells(i, j), Cells(i, j + 1))) If sumdm < inventory Then dm.Cells(i, j).Value = 0 Else dm.Cells(i, j).Value = sumdm - inventory End If Next j End If Next i Application.ScreenUpdating = True End Sub 

我几乎卡住了,但我目前的代码似乎给了我非常奇怪的数据。 我认为这可能是因为我正在更新并同时运行一个循环,但不知道如何解决这个问题或更好的方式来编码。

你可以通过这样的读写来加速你的代码

 Dim data As Variant ' read data from sheet data = Sheets("a").Range("A1: D100").value ' read/write value to data(i,j) ' smt..... ' then write to sheet Sheets("a").Range("A1: D100") = data 

我想你太懒了,懒得正确设置你的数据types。 这不是Python好吗?

 Sub Test() Application.ScreenUpdating = False Set dm = Worksheets("a") Set CTOT = dm.Columns("AG") Dim inventory, sumdm As Double dm.Activate lastcol = dm.Cells(1, Columns.Count).End(xlToLeft).Column fz = dm.Range("G" & Rows.Count).End(xlUp).Row Dim data, ivn As Variant data = dm.Range(dm.Cells(3, 7), dm.Cells(fz, lastcol)) ivn = dm.Range("AG3:AG" & fz) For i = LBound(data, 1) To UBound(data, 1) inventory = CLng(ivn(i, 1)) If inventory > 0 Then sumdm = 0 For j = LBound(data, 2) To UBound(data, 2) sumdm = sumdm + data(i, j) If sumdm < inventory Then data(i, j) = 0 Else data(i, j) = sumdm - inventory Exit For End If Next j End If Next i dm.Range(dm.Cells(3, 7), dm.Cells(fz, lastcol)) = data Application.ScreenUpdating = True End Sub