求助:Excel中统计不符合规则的pserial值数量的方法
统计不符合规则的pserial值数量(Excel公式&VBA方案)
公式方案(无需修改数据,直接计算)
直接在任意空白单元格输入以下公式,即可得到不符合规则的pserial数量:
=SUMPRODUCT(--(NOT((LEN(B11:B9291)=8)*(ISNUMBER(1*B11:B9291)*(MOD(B11:B9291,100)>=1)*(MOD(B11:B9291,100)<=99)))))
公式说明:
LEN(B11:B9291)=8:检查pserial是否为8位字符ISNUMBER(1*B11:B9291):验证pserial是否全为数字(非数字内容转换为数值时会报错,ISNUMBER返回FALSE)MOD(B11:B9291,100)>=1且MOD(B11:B9291,100)<=99:确保最后两位persnum在1-99的有效范围内(如果业务允许00作为成员编号,可将>=1改为>=0)- 三个条件同时满足才是合规值,
NOT取反后统计不符合的数量,--将逻辑值转为1/0,SUMPRODUCT完成求和
VBA宏方案(批量统计,弹窗显示结果)
如果需要更直观的结果展示,可使用VBA宏,全程不修改原数据:
- 按
Alt+F11打开VBA编辑器 - 右键点击当前工作簿,选择「插入」→「模块」
- 粘贴以下代码:
Sub CountInvalidPSerial() Dim ws As Worksheet Dim rng As Range Dim cell As Range Dim invalidCount As Long ' 指定目标工作表,可根据实际修改表名 Set ws = ThisWorkbook.Sheets("Sheet1") Set rng = ws.Range("B11:B9291") invalidCount = 0 For Each cell In rng ' 跳过空单元格 If cell.Value <> "" Then ' 检查三项不合规条件:长度非8位、非数字、persnum超出1-99范围 If Len(cell.Value) <> 8 Or Not IsNumeric(cell.Value) Or _ (CLng(Right(cell.Value, 2)) < 1 Or CLng(Right(cell.Value, 2)) > 99) Then invalidCount = invalidCount + 1 End If End If Next cell ' 弹窗显示统计结果 MsgBox "不符合规则的pserial数量:" & invalidCount, vbInformation, "统计完成" End Sub
- 按
F5运行宏,即可看到统计结果弹窗
宏说明:
- 代码会遍历B11到B9291的所有单元格,跳过空值后逐一验证规则
- 若需调整persnum的有效范围,修改
CLng(Right(cell.Value, 2)) < 1或>99的数值即可
内容的提问来源于stack exchange,提问作者andrea65
相关产品推荐
相关产品推荐

