可重复的示例
考虑以下数据:
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
Here是一个包含208行的完整可重复示例。实际数据有更多的行和种类,其中每个种类的行数并不总是相同。
问题
我想做的是以下内容:
检查列#34; Cod"上的代码6的数量对于每个物种,小于3(最小阈值)且大于Area/100
(考虑结果四舍五入为整数)。如果满足其中一个条件,我想显示一个消息框。
代码6的计数小于3或大于综合(Area / 100,0)
预期结果
E_citriodora在列#34; 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。 2< 8.此结果还会触发消息框。
每次满足条件时都不需要显示消息框,但只有一条消息表明至少存在一个缺陷。
我尝试了什么
我可以使用公式为每个物种手动完成此操作。例如,关于数据帧的第一个物种:
=IF(OR(COUNTIF(H2:H73,6) < 3,COUNTIF(H2:H73,6) > ROUNDUP(D2/100,0)),"Not Ok", "Ok")
然而,我期望用宏实现这一目标,我的主要困难是在每组物种中设置计数,在这种情况下哪种类型的环最适合。 TKS。
答案 0 :(得分:1)
假设您的数据始终按照示例文件的方式排序,此代码会将代码6大于3的所有物种打印到您的控制台:
Sub test() 'Assuming A2 in Sheet 1 contains your first ID Dim r As Range Set r = ThisWorkbook.Sheets(1).Range("A2") if r = "" then exit sub Dim specie As String specie = "" Dim cod6 As Integer 'Stop at first empty row Do While Not r = "" 'Next Specie If specie <> r.Offset(0, 2) Then specie = r.Offset(0, 2) cod6 = 0 End If 'Count cod If r.Offset(0, 7) = 6 Then cod6 = cod6 + 1 'Check cod at end of specie If specie <> r.Offset(1, 2) Then 'Put your real condition here and make a msgbox If cod6 > 3 Then Debug.Print specie & " has cod6 greater than" End If Set r = r.Offset(1, 0) Loop End Sub