Excel精英培训网

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

[已解决]修改宏代码:统计1-100的遗漏 如何修改为 统计0-99的遗漏

[复制链接]
发表于 2014-3-18 00:34 | 显示全部楼层 |阅读模式
本帖最后由 lijian8003 于 2014-3-18 00:36 编辑

问题1:下述代码是统计1-100的遗漏,如何修改代码,使之能够统计0-99的遗漏?
问题2:下述代码是在B列写入数据后自动进行统计,如果需要改用宏按钮控制统计进程,如何修改代码?
Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Then Set Target = Target(1, 1)
    If Target.Column < 3 And Target.Column > 1 And Target.Row > 1 Then
        Application.EnableEvents = False
        b = False
        For Each cel In Cells(Target.Row, "B").Resize(1, 1)
            If cel = "" Then b = True: Exit For
        Next
        If Not b Then
            For i = 1 To 100
                For Each cel In Cells(Target.Row, "B").Resize(1, 1)
                    If cel.Value = i Then b = True: Exit For
                Next
                If b Then Cells(Target.Row, 3 + i).Value = 0 Else Cells(Target.Row, 3 + i).Value = 1 + IIf(Target.Row > 2, Cells(Target.Row - 1, 3 + i).Value, 0)
                b = False
            Next
        End If
    End If
    Application.EnableEvents = True
End Sub
最佳答案
2014-3-18 09:39
楼上正解。你的代码逻辑关系看得晕乎乎的。可以改成:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Count > 1 Then Set Target = Target(1, 1)
  3.     If Len(Target) = 0 Then Exit Sub
  4.     r = Target.Row
  5.     If Target.Column <> 2 Or r = 1 Then Exit Sub
  6.     Application.EnableEvents = False
  7.     For i = 1 To 100
  8.         Cells(r, 3 + i).Value = 1 + IIf(r > 2, Cells(r - 1, 3 + i).Value, 0)
  9.     Next
  10.     Cells(r, 3 + Target.Value).Value = 0
  11.     Application.EnableEvents = True
  12. End Sub
复制代码
另外宏按钮的可以写成
  1. Sub tt()
  2.      For k = 2 To [b65536].End(3).Row
  3.         If Len(Cells(k, 2)) > 0 Then
  4.             For i = 1 To 100
  5.                 Cells(k, 3 + i).Value = 1 + IIf(k > 2, Cells(k - 1, 3 + i).Value, 0)
  6.             Next
  7.             Cells(k, 3 + Cells(k, 2)).Value = 0
  8.         End If
  9.     Next
  10. End Sub
复制代码

附件(遗漏统计).rar

12.32 KB, 下载次数: 23

发表于 2014-3-18 01:41 | 显示全部楼层
按钮代码:
  1. Sub 按钮1_Click()
  2. Dim R As Byte
  3. For R = 2 To [B65536].End(xlUp).Row
  4.     Cells(R, "D").Resize(1, 100) = R - 1
  5.     Cells(R, "D").Offset(0, Cells(R, 2)) = 0
  6. Next
  7. End Sub
复制代码
然后0-99的你在第一行直接改就是了

评分

参与人数 1 +3 收起 理由
lijian8003 + 3 赞一个!

查看全部评分

回复

使用道具 举报

发表于 2014-3-18 09:39 | 显示全部楼层    本楼为最佳答案   
楼上正解。你的代码逻辑关系看得晕乎乎的。可以改成:
  1. Private Sub Worksheet_Change(ByVal Target As Range)
  2.     If Target.Count > 1 Then Set Target = Target(1, 1)
  3.     If Len(Target) = 0 Then Exit Sub
  4.     r = Target.Row
  5.     If Target.Column <> 2 Or r = 1 Then Exit Sub
  6.     Application.EnableEvents = False
  7.     For i = 1 To 100
  8.         Cells(r, 3 + i).Value = 1 + IIf(r > 2, Cells(r - 1, 3 + i).Value, 0)
  9.     Next
  10.     Cells(r, 3 + Target.Value).Value = 0
  11.     Application.EnableEvents = True
  12. End Sub
复制代码
另外宏按钮的可以写成
  1. Sub tt()
  2.      For k = 2 To [b65536].End(3).Row
  3.         If Len(Cells(k, 2)) > 0 Then
  4.             For i = 1 To 100
  5.                 Cells(k, 3 + i).Value = 1 + IIf(k > 2, Cells(k - 1, 3 + i).Value, 0)
  6.             Next
  7.             Cells(k, 3 + Cells(k, 2)).Value = 0
  8.         End If
  9.     Next
  10. End Sub
复制代码

评分

参与人数 1 +3 收起 理由
lijian8003 + 3 很给力!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-3-29 07:19 , Processed in 0.538461 second(s), 14 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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