Excel VBA - 仅将sumif应用于特定的有色单元格 - 引用上面的彩色单元格

时间:2013-08-12 11:09:55

标签: excel vba colors

我有一张这种格式的表格:

如何在K列的每个灰色单元格中创建一个创建SUMIF函数的宏(如=SUMIF(K419:K421;">0"))?

它应该直接在它上面的白色细胞总结,直到它到达上面的下一个灰色细胞。每个灰色单元格上方的白色单元格数不一致。

这是K列的一个例子:白色,白色,灰色,白色,白色,白色,白色,灰色,白色,灰色。

关于sumif的范围: 我知道R [-1]直接引用每个灰色单元格上方的单元格,但是我应该如何在上面的灰色单元格之后直接引用单元格呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

最好的方法是考虑如何手动执行此操作。即。

1)从K列顶部开始。

2)向下移动列K直到空白

3)使用最后一个灰色单元格+ 1到当前灰色单元格的范围输入SUMIF语句 - 1

4)循环直到数据底部

因此...

Private Sub loopSumIF()
Dim currentRow As Integer
Dim lastGreyRow As Integer
Dim endLoop as Boolean

currentRow = 2
lastGreyRow = 2
endLoop = False

Do Until endLoop = True
    if ActiveSheet.Range("K" & currentrow) = "" then
        ActiveSheet.Range("K" & currentRow) = "=SUMIF(K" & lastGreyRow & ":K" & currentorw - 1 & "," & Chr(34) & ">0" & Chr(34) & ")" 'set formula
        lastGreyRow = currentRow + 1 'set the top of the next sumif to the next cell down
    End If
    currentRow = currentRow + 1 'move currentrow down
    If ActiveSheet.Range("K" & currentRow) = "" Then endLoop = True 'two blank cells in a row indicates end of data
Loop

End Sub

注意:您可以通过查看单元格的colorIndex来完成此操作,但如果由于某种原因某人决定使用稍微不同的灰色阴影或粉红色(作为示例),那么它将无法正常工作。您可能会更安全地查看空白值。