按行与COUNTIF匹配列

我正在尝试创build一个自定义函数来评估一些数据。 数据包括从活生物体中取出的几个样品(列),细菌+其数量(行)。 我知道哪些细菌是独特的(只出现在1个样本中),但我想知道每个样本中有多less独特的细菌。

要知道哪些细菌是独特的,我使用=COUNTIF(A:A,">"&0)在每一行,如果返回1,那么它是唯一的。

理想情况下,我正在想的是:

 Function Custom(sampleRange, occurringBacteria) As Integer Dim bacteriaUniqueToSample as Integer: bacteriaUniqueToSample = 0 For Each sampleRange And occurringBacteria If sampleRange > 0 And occurringBacteria = 1 Then bacteriaUniqueToSample = bacteriaUniqueToSample + 1 Next Custom = bacteriaUniqueToSample End Function 

当然,这是不可能的。

例:

在这里输入图像说明

在单元格B7input并复制到D7

 =COUNTIFS(B$2:B$5,">"&0,$E$2:$E$5,"Unique") 

用户定义的函数 (又名UDF )可以写成这个。 虽然你的示例布局与函数的单元格和持有Sample1,Sample2等标签的单元格之间具有相关性,但要更通用,则需要提供更宽的工作表关系。

 Function uniq_bacts_by_sampl(rSample As Range, rOccurringBacteria As Range) Dim cnt As Long, rw As Long, rng As Range For rw = 1 To rOccurringBacteria.Rows.Count Set rng = Application.Index(rOccurringBacteria, rw, 0) If Application.CountIf(rng, ">" & 0) = 1 And _ CBool(Cells(rng.Row, rSample.Column).Value2) Then cnt = cnt + 1 End If Set rng = Nothing Next rw uniq_bacts_by_sampl = cnt End Function 

UDF就像其他任何本地工作表函数一样使用。

句法:
= uniq_bacts_by_sampl( <带标签条件的单元>,<数据范围>

计算独特的列

上面的示例图像B7中的公式是,

 =uniq_bacts_by_sampl(B$1, $B2:$D5) 

根据需要填写。