按行与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
当然,这是不可能的。
例:
在单元格B7
input并复制到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)
根据需要填写。