我是VBA的新手,我一直致力于一个VBA项目,该项目需要找到空单元格,并将所有单元格添加到该空单元格上方,并将总和放在上面。我尝试找到合适的代码,但没有运气。任何建议将不胜感激。
这是项目中数据的一部分:
谢谢!
答案 0 :(得分:1)
实际上,你的问题并不清楚。我的代码的逻辑是
循环 startRow 和 lastRow 之间的所有行并找到空白单元格(#N / A)。
如果找到,则添加所有值从该单元格上方的单元格并将总数设置为该单元格。
但是每季度添加一次。如果找到连续的单元格,则设置为0.表示:
如果startRow = 1且lastRow = 11,则空白单元格为5,10和11 因此,第5行单元格的总值是加上4个单元格(1 + 2 + 3 + 4)和
第10行单元格的总值也加上4个单元格(6 + 7 + 8 + 9)。第11行单元格的总值为0.不知道要做的逻辑。
我认为我给出了正确答案。我已经测试了代码。它对我来说非常有用。如果不适合你,请告诉我。代码如下:
Public Sub findTotal()
Dim startRow, lastRow As Long
Dim row, innerStart As Long
With Sheets("Budget")
'Set start row
startRow = 1
innerStart = startRow
'last row must be last blank row for add all cell above from that
lastRow = 35
'Looping all row between startRow and lastRow
For row = startRow To lastRow Step 1
'Loop until blank
If .Range("N" & row).Text = "#N/A" Then
If row - startRow > 0 And row <> innerStart Then
'Set total of above cell to blank cell
.Range("N" & row) = WorksheetFunction.Sum(.Range("N" & row - 1, "N" & innerStart))
'Set next start row for adding next blank cell
innerStart = row + 1
Else
'Set 0 for continuous cells
.Range("N" & row) = 0
'Here, if you want to set above total, you can use as follow:
'.Range("N" & row) = .Range("N" & row - 1)
End If
End If
Next row
End With
End Sub