代码之家  ›  专栏  ›  技术社区  ›  Grubbmeister

如何忽略已在前几行中计数的累积计数值

  •  1
  • Grubbmeister  · 技术社区  · 6 年前

    Sample  Species1    Species2    Species3    Cumulative count
    1       1                                   1
    2       1           1                       2
    3       1                                   2
    4       2                                   2
    5       1           2           1           3
    

    我想计算每个样本增加的每一个新物种。因此在上面的例子中,样本3和样本4没有在物种总数中添加任何新物种,因此它们的累积计数保持不变(我试图创建一个物种累积曲线)。

    我已经尝试过,但无法使用数字>0(例如),而不是文本: How to ignore data previously counted by countif and return a specific value in cell

    基本上,我需要一些东西来检查当前行中的物种是否已经存在于前几行中。 enter image description here

    是否有一个excel公式可以用来填充“累计计数”列并返回上面的结果?我还应该提到,一个简短的解决方案将是最好的,因为我有35+物种和公式可以得到长期和复杂的非常快。如有任何帮助,将不胜感激。

    2 回复  |  直到 6 年前
        1
  •  1
  •   learnAsWeGo    6 年前

    水平移动很简单,公式较小:

    =SUMPRODUCT((B3:D3>0)*1,(B$2:D2<=0)*1)+E2
    

    =SUMPRODUCT((B6:D6>0)*1,(B$2:D2<=0)*1,(B$3:D3<=0)*1,(B$4:D4<=0)*1,(B$5:D5<=0)*1)+E5
    

    enter image description here

    enter image description here

    我找到了一种方法,但这也许可以稍微改进一下:

    对于我们的第一个累计行:

    =COUNTIF(B2:D2,"<>" & "")
    

    此后:

    =IF(AND(B3>0,SUM(B$2:B2)<=0),1,0)+IF(AND(C3>0,SUM(C$2:C2)<=0),1,0)+IF(AND(D3>0,SUM(D$2:D2)<=0),1,0)+E2
    

    =IF(AND(B6>0,SUM(B$2:B5)<=0),1,0)+IF(AND(C6>0,SUM(C$2:C5)<=0),1,0)+IF(AND(D6>0,SUM(D$2:D5)<=0),1,0)+E5
    

    enter image description here

    enter image description here

    enter image description here

        2
  •  0
  •   Grubbmeister    6 年前

    较短的解决方案是UDF,这里由 JvdV : stackoverflow.com/questions/51980149/count-column-if-it-contains-a-filled-cell-in-excel/51980258

    COUNTA funtion一个平滑的方式可以是UDF,可能是这样:

    Function CountColumns(RNG As Range) As Long
    
    Dim COL As Range
    For Each COL In RNG.Columns
        If Application.WorksheetFunction.CountA(COL) > 0 Then CountColumns = CountColumns + 1
    Next COL
    
    End Function