Vba 如何使用另一个函数值返回的条件来SUMIF(或?

Vba 如何使用另一个函数值返回的条件来SUMIF(或?,vba,excel,excel-formula,Vba,Excel,Excel Formula,我试图对一列进行一个非常简单的求和,不包括彩色列。我希望加总的一栏是我所有的账户,绿色的代表付费账户。我想要一个代表“剩余支付”值的金额,以跟踪我的进度,而无需每次重复我的公式。颜色不是有条件的,也不能是有条件的 我已经创建了两个函数: Function GetColor(MyCell As Range) GetColor = MyCell.Interior.ColorIndex End Function 及 因此,我已经在我的数字旁边创建了一列,其中包含公式(单元格编号不断变化): 这会吐出

我试图对一列进行一个非常简单的求和,不包括彩色列。我希望加总的一栏是我所有的账户,绿色的代表付费账户。我想要一个代表“剩余支付”值的金额,以跟踪我的进度,而无需每次重复我的公式。颜色不是有条件的,也不能是有条件的

我已经创建了两个函数:

Function GetColor(MyCell As Range)
GetColor = MyCell.Interior.ColorIndex
End Function

因此,我已经在我的数字旁边创建了一列,其中包含公式(单元格编号不断变化):

这会吐出真值或假值,然后我可以基于我的SUMIF公式,目前我有这个(E列包含付费函数的值,C列包含我的帐户值):


我想看看是否有可能绕过这个额外的列,直接在SUMIF中运行这个函数(或者另一个函数?),这样我所要做的就是给单元格上色并只刷新一个公式。

在程序决策过程中使用颜色是不理想的,对于一个简单的任务来说过于复杂

但是,假设您想要这样做(或者对此没有控制权),并且要求和的单元格未使用
Interior.ColorIndex=50
着色,并且假设您的值在
C2:C18
范围内(或在任何地方),下面是一个VBA函数

将函数用作付费(C2:C18,50)

函数PAID(MyCells作为范围,color\u作为整数)作为Double
Dim cc As范围
双倍积累
累积=0'不需要,但需要良好实践
对于菌丝体中的每个cc
如果(cc.Interior.ColorIndex color_回避),则
累计=累计+抄送值
如果结束
下一个cc
已付=累积
端函数

要重复此操作,此函数将对所有使用
color.index
着色的NOT单元格求和(例如,50)

这是相当复杂的,并且依赖硬颜色编码会出现错误-为什么你不在付费项目中输入一个简单的“付费”呢?我意识到使用颜色索引并不理想,但它可以完成简单的任务,比如一笔金额。尽管我不是程序员,也讨厌编码,但我经常在Python、XML和VB方面受到挑战,所以这让我的大脑在这方面保持活跃。无论如何,这个电子表格的想法很好,比我想象的要简单得多。谢谢!就这样!虽然这个公式把所有的颜色加起来,而不是排除在外。因此,我改变了颜色代码,以反映其他单元格的颜色(在本例中为浅灰色15),这是完美的!谢谢@user3161018抱歉-是的,我没有听到你说你在
false
上做
SUMIF
。这很容易更改-我将使用另一个版本更新该问题,如果颜色索引不是某个给定的数字,则该版本将求和。@user3161018更新该函数,使其按照您最初描述的方式执行。现在,它应该用您给它的
color.Index
对未着色的单元格求和。
Function PAID(MyCell As Range) As Boolean
    If MyCell.Interior.ColorIndex = 50 Then
        PAID = True
    Else
        PAID = False
    End If
End Function
=PAID(C13)
=SUMIF(E2:E18,"FALSE",C2:C18)
Function PAID(MyCells As Range, colour_avoid As Integer) As Double
Dim cc As Range
Dim accumulate As Double

accumulate = 0 'not needed but good practice

  For Each cc In MyCells
    If (cc.Interior.ColorIndex <> colour_avoid) Then
       accumulate = accumulate + cc.Value
    End If
  Next cc
PAID = accumulate
End Function