统计行组内的特定观测值的数量

可重复的例子

考虑以下数据:

ID ID_2 Specie Area Tree DBH H Cod 2 111 E_citriodora 432 1 19.098 20 2 111 E_citriodora 432 2 1 2 111 E_citriodora 432 3 1 2 111 E_citriodora 432 4 20.530 17.4 6 ... 2 111 E_grandis 557 1 1 2 111 E_grandis 557 2 24.828 15 6 2 111 E_grandis 557 3 1 2 111 E_grandis 557 4 14.483 16 5 ... 2 111 E_paniculata 704 1 1 2 111 E_paniculata 704 2 14.164 19.5 2 111 E_paniculata 704 3 1 2 111 E_paniculata 704 4 17.507 20 

这是208行的一个完全可重复的例子。 实际的数据有更多的行和物种,其中每种物种的行数并不总是相同的。

我想要做的是以下几点:

检查每个实体的“Cod”列的代码6的计数是否小于3(最小阈值)并且大于Area/100 (考虑到四舍五入为整数)。 如果满足其中一个条件,我想显示一个消息框。

代码6的计数小于3或大于舍入(Area / 100,0)

预期结果

E_citriodora在“Cod”栏中有四个数字6。 代码6的正确计数应该在3和=ROUNDUP(432/100,0) = 5之间。 所以,3 <4 <5不会触发消息框。

E_grandis对代码6有7个观测值,但是在这种情况下,最大阈值是6,因为557/100的面积是5.57,四舍五入为6。
3 <7 <6.这个结果会触发消息框。

第三个例子,E_paniculata对于代码6只有2个观察值。这个值小于最小值3. 3 <2 <8.这个结果也会触发消息框。

每次满足条件时不需要显示一个消息框,而只需要一条消息指出至less有一个缺陷。

我曾经尝试过

我可以使用公式为每个物种手动执行此操作。 例如,关于dataframe的第一类:

 =IF(OR(COUNTIF(H2:H73,6) < 3,COUNTIF(H2:H73,6) > ROUNDUP(D2/100,0)),"Not Ok", "Ok") 

但是我期望用macros来实现这个目标,而且我的主要困难是在每组硬币中设置计数,在这种情况下哪种types的循环是最合适的。 韩国社交协会。

假设你的数据总是按照你的示例文件的方式sorting,那么这个代码会将所有的code6大于3的物种打印到你的控制台:

小测()

     '假设表1中的A2包含您的第一个ID
    昏暗的范围
    设置r = ThisWorkbook.Sheets(1).Range(“A2”)
    如果r =“”则退出子

    昏暗物种作为string
     specie =“”

    昏暗的cod6作为整数

     “先停在空行
    尽pipe不是r =“” 

         “下一个硬币
        如果物种<> r.Offset(0,2)那么
            物种= r.Offset(0,2)
             cod6 = 0
        万一

         “算鳕鱼
        如果r.Offset(0,7)= 6则cod6 = cod6 + 1
         '检查鳕鱼在物种结束
        如果物种<> r.Offset(1,2)那么

             '把你的真实情况放在这里,并创build一个msgbox
            如果cod6> 3那么Debug.Print specie&“cod6大于”

        万一

        设置r = r.Offset(1,0)
    循环

结束小组