Excel精英培训网

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

[已解决]该怎样正确计数?

[复制链接]
发表于 2014-5-2 18:01 | 显示全部楼层 |阅读模式
本帖最后由 gwfzh 于 2014-5-3 10:18 编辑

各位老师:
     at:av区域数值是相应行J列值除3余数后的遗漏值表,J列值的除3余数在相应行的at:av区域用相应的符号(余0=“●”、余1=“▲”、余2=“■”)表示,即当J列值的除3余数=“0”时,相应行AT列值等于“●”,否则用“计数”表示其遗漏,au、av(余1、余2)依此类推.
     运行模块1“dinwei()”程序后,余数的符号表示是正确的,现在的问题是遗漏值的“计数”出现了错误!“dinwei()”程序该怎样正确“计数”j列除3余数的遗漏值?请各位老师帮忙了!谢谢!!! Book1.rar (9.98 KB, 下载次数: 6)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2014-5-2 18:13 | 显示全部楼层
怎样正确“计数”j列除3余数的遗漏值?
详细说明计算规则,方便测试代码
回复

使用道具 举报

 楼主| 发表于 2014-5-2 19:13 | 显示全部楼层
本帖最后由 gwfzh 于 2014-5-2 19:28 编辑
dsmch 发表于 2014-5-2 18:13
怎样正确“计数”j列除3余数的遗漏值?
详细说明计算规则,方便测试代码

判断当j5=28。除3余1时,那么au5(余1遗漏值)=“▲”,在at5(余0遗漏值)和av5(余2遗漏值)各计数1,当j6=17。除3余2时,那么av6(余2遗漏值)=“▲”,在at6(余0遗漏值)和au6(余1遗漏值)分别计数为2和1,其余依此类推
              另“dinwei()”程序中if判断i当只有2种情况时,结果是正确的,而只有在判断出现3种情况以上后,才出现该错误!怎样解决请老师帮助了!谢谢!!!         
回复

使用道具 举报

发表于 2014-5-2 19:53 | 显示全部楼层
  1. Sub Macro1()
  2. Dim arr, brr, w, d,i&,j%,x%
  3. Set d = CreateObject("scripting.dictionary")
  4. arr = Range("j5").CurrentRegion
  5. w = Array("●", "▲", "■")
  6. ReDim brr(1 To UBound(arr), 1 To 3)
  7. For i = 1 To UBound(arr)
  8.     x = arr(i, 1) Mod 3
  9.     For j = 0 To 2
  10.         If x = j Then
  11.             brr(i, j + 1) = w(j)
  12.         Else
  13.             d(j) = d(j) + 1
  14.             brr(i, j + 1) = d(j)
  15.         End If
  16.     Next
  17. Next
  18. Range("ax5").Resize(UBound(brr), 3) = brr
  19. End Sub
复制代码

评分

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

查看全部评分

回复

使用道具 举报

发表于 2014-5-2 19:56 | 显示全部楼层
………………

Book1.zip

13.62 KB, 下载次数: 2

回复

使用道具 举报

 楼主| 发表于 2014-5-2 20:41 | 显示全部楼层
dsmch 发表于 2014-5-2 19:56
………………

谢谢老师帮助:
     
     可能问题沒有说清楚,遗漏值的“计数”仍出现了错误!现将正确示例附上,请老师继续帮忙了!谢谢!!! 计数.rar (19.52 KB, 下载次数: 3)
回复

使用道具 举报

发表于 2014-5-2 20:47 | 显示全部楼层    本楼为最佳答案   
Sub Macro1()
Dim arr, brr, w, d, i&, j%, x%
Set d = CreateObject("scripting.dictionary")
arr = Range("j5").CurrentRegion
w = Array("●", "▲", "■")
ReDim brr(1 To UBound(arr), 1 To 3)
For i = 1 To UBound(arr)
    x = arr(i, 1) Mod 3
    For j = 0 To 2
        If x = j Then
            brr(i, j + 1) = w(j)
            d(j) = 0
        Else
            d(j) = d(j) + 1
            brr(i, j + 1) = d(j)
        End If
    Next
Next
Range("ax5").Resize(UBound(brr), 3) = brr
End Sub

评分

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

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-26 07:30 , Processed in 0.329672 second(s), 15 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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