如何用Excel VBA的CountIfs统计非“completed”的机场相关记录?
统计非"completed"状态的机场记录正确实现方法
你原来的代码仅统计状态**精确等于"Not completed"**的机场记录,但实际需求是排除所有状态为"completed"的记录(包括其他非"completed"的状态,比如空值、"In Progress"等),只需修改CountIfs的条件即可:
基础正确代码
Sheets("Create Summary").Range("B3").Value2 = _ Excel.WorksheetFunction.CountIfs( _ wsSourceData.[P:P], "Airports", _ wsSourceData.[AQ:AQ], "<>completed")
核心改动是把原来的"Not completed"换成"<>completed"——<>是Excel里表示「不等于」的操作符,这样就能匹配所有AQ列不是"completed"的单元格。
性能优化建议
尽量别用整列引用([P:P]、[AQ:AQ]),因为会遍历整列拖慢运行速度,建议用实际的数据范围:
' 先找到P列最后一行有数据的行 Dim lastRow As Long lastRow = wsSourceData.Cells(wsSourceData.Rows.Count, "P").End(xlUp).Row Sheets("Create Summary").Range("B3").Value2 = _ Excel.WorksheetFunction.CountIfs( _ wsSourceData.Range("P2:P" & lastRow), "Airports", _ wsSourceData.Range("AQ2:AQ" & lastRow), "<>completed")
特殊需求:排除空值
如果需要只统计**有状态且不是"completed"**的记录(排除AQ列空值的情况),可以再加一个条件:
Sheets("Create Summary").Range("B3").Value2 = _ Excel.WorksheetFunction.CountIfs( _ wsSourceData.Range("P2:P" & lastRow), "Airports", _ wsSourceData.Range("AQ2:AQ" & lastRow), "<>completed", _ wsSourceData.Range("AQ2:AQ" & lastRow), "<>")
内容的提问来源于stack exchange,提问作者Anshu
相关产品推荐
相关产品推荐

