Excel VBA:如何判断11位单元格第8位为奇数并筛选复制
修改VBA代码实现指定条件筛选
没问题,咱们直接调整代码就能实现你要的需求——不仅要筛选A列中长度为11的内容,还要确保这些内容的第8位是奇数(1、3、5、7、9)。
修改后的完整代码
For Each cell In Range("A2", Range("A" & Rows.Count).End(xlUp)) ' 同时满足三个条件:长度11位、第8位是数字、第8位为奇数 If Len(cell.Value) = 11 And IsNumeric(Mid(cell.Value, 8, 1)) And CInt(Mid(cell.Value, 8, 1)) Mod 2 = 1 Then cell.Copy Destination:=Range("B" & Rows.Count).End(xlUp).Offset(1, 0) End If Next cell
关键新增逻辑说明
- 提取第8位字符:用
Mid(cell.Value, 8, 1)从单元格内容中截取第8位的单个字符(Mid函数参数分别是:源字符串、起始位置、截取长度) - 验证数字格式:
IsNumeric(Mid(...))确保第8位是数字,避免遇到非数字内容时出错 - 判断奇数:
CInt(Mid(...)) Mod 2 = 1把截取到的字符转成整数后,用取模运算判断是否为奇数(奇数除以2余数为1)
如果你能确定所有11位内容都是纯数字,也可以用更简洁的写法:
For Each cell In Range("A2", Range("A" & Rows.Count).End(xlUp)) If Len(cell.Value) = 11 And InStr("13579", Mid(cell.Value, 8, 1)) > 0 Then cell.Copy Destination:=Range("B" & Rows.Count).End(xlUp).Offset(1, 0) End If Next cell
这个写法直接检查第8位字符是否在"13579"字符串内,代码更短,适合已知11位内容都是数字的场景。
内容的提问来源于stack exchange,提问作者user9534456
相关产品推荐
相关产品推荐

