Excel精英培训网

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

[已解决]批量求遗漏值的VBA代码要如何写,比较麻烦,繁琐,望能解决?

[复制链接]
发表于 2014-12-6 16:57 | 显示全部楼层 |阅读模式
本帖最后由 qiuzhuvba 于 2014-12-6 23:10 编辑

批量求遗漏值的VBA代码要如何写,比较麻烦,繁琐,望能解决?


表格jh表
jh表的B列是要分析的数据源.数据是01-11之间的11个数


B1=07 02 10 11 04

要统计其 两位,三位,四位的遗漏值.
那么先要对其进行分解.

两位:就是07 02 10 11 04,这5个数字每两个组合,从小到大,不重复,就有10种.
三位:就是07 02 10 11 04,这5个数字每三个组合,从小到大,不重复,就有10种.
四位:就是07 02 10 11 04,这5个数字每四个组合,从小到大,不重复,就有5种.

分解成两位,有10种
02 04
02 07
02 10
02 11
04 07
04 10
04 11
07 10
07 11
10 11
分解成3位,有10种
02 04 07
02 04 10
02 04 11
02 07 10
02 07 11
02 10 11
04 07 10
04 07 11
04 10 11
07 10 11
分解为4位,有5种
02 04 07 10
02 04 07 11
02 04 10 11
02 07 10 11
04 07 10 11

得到分解的结果后,就是对其结果填充遗漏值了..

分解出来的10个两位,在表2的A列里 找到自己的位置,相同的(出现的)就填0,不相同(没出现的)就自动累计1

如图所示--
QQ截图20141206163129.jpg

分解出来的10个三位,5个4位的也是如此....


例子表格里的表jh里只有40组数据要进行批量计算遗漏值,

感觉要手动填写,那非常累人.

批量计算遗漏值的VBA解法是要如何写呢..
请教各位老师..

````
表2 (2)的内容是例子 B1的10个两位的遗漏值填写结果.
表2,表3,表4为表jh里的40组数据的遗漏值的最终计算结果/
`````
附件下载: 20141206.rar (8.7 KB, 下载次数: 5)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
 楼主| 发表于 2014-12-6 18:18 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-12-6 22:42 | 显示全部楼层
回复

使用道具 举报

 楼主| 发表于 2014-12-6 23:06 | 显示全部楼层
原先表格里的 表3 表4 数据里的遗漏值计算错误..已重新上传,不好意思了.各位老师
回复

使用道具 举报

发表于 2014-12-7 15:37 | 显示全部楼层
这个  有点复杂
回复

使用道具 举报

发表于 2014-12-8 08:55 | 显示全部楼层
毫无难度……
回复

使用道具 举报

发表于 2014-12-8 10:32 | 显示全部楼层
因为是固定组合,所以就用了简单循环来做。
  1. Sub test() 'by kagawa 2014/12/8
  2.     Dim ar, i&, i1&, i2&, i3&, i4&, k&, s, tms#
  3.     tms = Timer
  4.    
  5.     Dim a1&(1 To 11)
  6.     Dim b1$(1 To 11)
  7.     For i1 = 1 To 11
  8.         b1(i1) = Right(0 & i1, 2)
  9.     Next
  10.    
  11.     Dim a2&(1 To 10, 2 To 11)
  12.     ReDim b2(1 To WorksheetFunction.Combin(11, 2), 1 To 2)
  13.     k = 0
  14.     For i1 = 1 To 10
  15.     For i2 = i1 + 1 To 11
  16.         k = k + 1: a2(i1, i2) = k: b2(k, 1) = b1(i1) & " " & b1(i2)
  17.     Next i2, i1
  18.    
  19.     Dim a3&(1 To 9, 2 To 10, 3 To 11)
  20.     ReDim b3(1 To WorksheetFunction.Combin(11, 3), 1 To 2)
  21.     k = 0
  22.     For i1 = 1 To 9
  23.     For i2 = i1 + 1 To 10
  24.     For i3 = i2 + 1 To 11
  25.         k = k + 1: a3(i1, i2, i3) = k: b3(k, 1) = b1(i1) & " " & b1(i2) & " " & b1(i3)
  26.     Next i3, i2, i1
  27.    
  28.     Dim a4&(1 To 8, 2 To 9, 3 To 10, 4 To 11)
  29.     ReDim b4(1 To WorksheetFunction.Combin(11, 4), 1 To 2)
  30.     k = 0
  31.     For i1 = 1 To 8
  32.     For i2 = i1 + 1 To 9
  33.     For i3 = i2 + 1 To 10
  34.     For i4 = i3 + 1 To 11
  35.         k = k + 1: a4(i1, i2, i3, i4) = k: b4(k, 1) = b1(i1) & " " & b1(i2) & " " & b1(i3) & " " & b1(i4)
  36.     Next i4, i3, i2, i1

  37.     ar = Range("a1").CurrentRegion
  38.     Dim c&(1 To 5)
  39.     For i = 1 To UBound(ar)
  40.         s = Split(ar(i, 2))
  41.         Erase a1
  42.         For i1 = 0 To UBound(s)
  43.             a1(s(i1)) = 1
  44.         Next
  45.         k = 0
  46.         For i1 = 1 To 11
  47.             If a1(i1) Then k = k + 1: c(k) = i1
  48.         Next
  49.         
  50.         For i1 = 1 To 4
  51.         For i2 = i1 + 1 To 5
  52.             k = a2(c(i1), c(i2)): b2(k, 2) = b2(k, 2) + 1
  53.         Next i2, i1
  54.         
  55.         For i1 = 1 To 3
  56.         For i2 = i1 + 1 To 4
  57.         For i3 = i2 + 1 To 5
  58.             k = a3(c(i1), c(i2), c(i3)): b3(k, 2) = b3(k, 2) + 1
  59.         Next i3, i2, i1
  60.         
  61.         For i1 = 1 To 2
  62.         For i2 = i1 + 1 To 3
  63.         For i3 = i2 + 1 To 4
  64.         For i4 = i3 + 1 To 5
  65.             k = a4(c(i1), c(i2), c(i3), c(i4)): b4(k, 2) = b4(k, 2) + 1
  66.         Next i4, i3, i2, i1
  67.     Next
  68. '    Debug.Print Format(Timer - tms, "0.000s")

  69.     Sheet2.Range("a1").Resize(UBound(b2), 2) = b2
  70.     Sheet3.Range("a1").Resize(UBound(b3), 2) = b3
  71.     Sheet4.Range("a1").Resize(UBound(b4), 2) = b4
  72.     MsgBox Format(Timer - tms, "0.000s")
  73. End Sub
复制代码

test.zip

20.05 KB, 下载次数: 11

回复

使用道具 举报

发表于 2014-12-8 17:30 | 显示全部楼层    本楼为最佳答案   
重新看了一下题目,原来楼主要求的统计方法是到最近一期为止的遗漏状态……

按以下附件计算。

test2.zip

21.08 KB, 下载次数: 20

回复

使用道具 举报

发表于 2014-12-26 15:30 | 显示全部楼层
香川群子真是高手哟
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-24 05:19 , Processed in 0.407104 second(s), 13 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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