Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 812|回复: 3

[已解决]两段代码为什么一种行,一种不行?

[复制链接]
发表于 2022-5-11 12:06 | 显示全部楼层 |阅读模式
本帖最后由 ck03w11 于 2022-5-11 12:07 编辑

身份证在 B 列,年级在 F 列,要求是按身份证号统计出六年级省外学生数和省内县外学生数,我写了两段代码,为什么“ss1”代码行,“ss2”码不行,也没提示出错只是统计为0,请问老师这是什么原因?第二段代码应怎样改才能一次读取?谢谢
Sub ss1()
Dim i1, j1, k1  As Integer, arr()
j1 = Sheet1.Range("b65536").End(xlUp).Row
arr = Sheet1.Range("b3:w" & j1)
For i1 = 2 To UBound(arr)
    If Mid(arr(i1, 1), 1, 6) <> "330523" And Mid(arr(i1, 1), 1, 2) = "33" And arr(i1, 5) = "六年级" Then
    k1 = k1 + 1
    End If
    Next
    Sheet2.Range("i18") = k1
Dim i, j, k As Integer, arr1()
j = Sheet1.Range("b65536").End(xlUp).Row
arr1 = Sheet1.Range("b3:w" & j)
   For i = 2 To UBound(arr1)
      If Mid(arr1(i, 1), 1, 2) <> "33" And arr1(i, 5) = "六年级" Then
      k = k + 1
    End If
    Next
Sheet2.Range("i17") = k
End Sub


Sub ss2()
Dim i, j, k, k1 As Integer, arr()
    j = Sheet1.Range("b65536").End(xlUp).Row
    arr = Sheet1.Range("b2:w" & j)
    For i = 2 To UBound(arr)
    If Mid(arr(i, 1), 1, 2) <> "33" And arr(i, 5) = "六年级" Then
      k = k + 1
      If Mid(arr(i, 1), 1, 2) = "33" And arr(i, 5) = "六年级" And Mid(arr(i, 1), 1, 6) <> "330523" Then
      k1 = k1 + 1
      End If
    End If
    Next
        Sheet2.Range("i17") = k
        Sheet2.Range("i18") = k1
        
End Sub


最佳答案
2022-5-11 13:45
帮你修改一下
Sub ss2()
    Dim I, J, k, k1 As Integer, Arr()
    J = Sheet1.Range("B65536").End(xlUp).Row
    Arr = Sheet1.Range("B2:W" & J)
    For I = 2 To UBound(Arr)
        If Arr(I, 5) = "六年级" Then
          If Mid(Arr(I, 1), 1, 2) <> "33" Then k = k + 1
          If Mid(Arr(I, 1), 1, 2) = "33" And Mid(Arr(I, 1), 1, 6) <> "330523" Then k1 = k1 + 1
        End If
    Next
    Sheet2.Range("I17") = k
    Sheet2.Range("I18") = k1
End Sub

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2022-5-11 13:44 | 显示全部楼层
本帖最后由 zjdh 于 2022-5-11 13:47 编辑

你第二个判断是包容在第一个判断内的。
你这一句,已限制了 =33的
If Mid(Arr(I, 1), 1, 2) <> "33" And Arr(I, 5) = "六年级" Then
怎么会有
If Mid(arr(i, 1), 1, 2) = "33" 出现?
回复

使用道具 举报

发表于 2022-5-11 13:45 | 显示全部楼层    本楼为最佳答案   
帮你修改一下
Sub ss2()
    Dim I, J, k, k1 As Integer, Arr()
    J = Sheet1.Range("B65536").End(xlUp).Row
    Arr = Sheet1.Range("B2:W" & J)
    For I = 2 To UBound(Arr)
        If Arr(I, 5) = "六年级" Then
          If Mid(Arr(I, 1), 1, 2) <> "33" Then k = k + 1
          If Mid(Arr(I, 1), 1, 2) = "33" And Mid(Arr(I, 1), 1, 6) <> "330523" Then k1 = k1 + 1
        End If
    Next
    Sheet2.Range("I17") = k
    Sheet2.Range("I18") = k1
End Sub

回复

使用道具 举报

 楼主| 发表于 2022-5-11 14:10 | 显示全部楼层
zjdh 发表于 2022-5-11 13:45
帮你修改一下
Sub ss2()
    Dim I, J, k, k1 As Integer, Arr()

谢谢老师!行了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-9-21 19:22 , Processed in 0.279199 second(s), 6 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表