ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 3894|回复: 9

[讨论] 关于重复连续次数与间隔之最值的探讨

[复制链接]

TA的精华主题

TA的得分主题

发表于 2011-11-10 10:03 | 显示全部楼层 |阅读模式
本帖最后由 万林 于 2011-11-11 11:30 编辑

近段时间,彩友们给我设计统计一些彩票的规律,其中就是求出现次数、最大遗漏、最大连续出现(连号)数、最大不连号、平均遗漏、平均连号、平均遗漏等。根据彩友们的需要,本人用EXCEL设计两张表,一张用来存放各期开奖号码的情况,另一张用来设计统计彩友的需要数据。如下图:
] 开奖号码及分析统计.JPG 和值和尾.JPG 顺序类型.JPG
当前出现次数:统计各种走势情况出现的次数。
当前最大遗漏:统计各种走势情况在查询期间中前次与后次出现的间隔的最大值。
当前最大连号:统计各种走势情况在查询期间连续重复出现的最大重复数。
当前最大不连号:统计各种走势情况在查询期间重复出现前后两次之间间隔的最大值。即前次重复与后一次重复之间的间隔的最大值,可理解为连号遗漏。
计算公式如下:
当前出现次数       =COUNTIF(E$6:E311,E$5)=SUM(IF(分析区域=E$5,1,0)) 前者往往将文本数字与数字误为一样,后者可以解决这个问题了。
当前出现频率 =COUNTIF(E$6:E311,E$5)/ROWS(E$6:E311)*100=INT(SUM(IF(分析区域=E$5,1,0))/ROWS(分析区域)*100),与上述相同前者往往将文本数字与数字误为一样
当前最大遗漏    =MAX(E$5:E311)
{=MAX(--FREQUENCY(IF(E6:E311<>E$5,ROW(6:311)),IF(E6:E311=E$5,ROW(6:311))))}
平均遗漏=INT(SUM(--FREQUENCY(IF(分析区域<>下行区域,ROW(分析区域)),IF(分析区域=E$5,ROW(分析区域))))/COUNT(IF(--FREQUENCY(IF(分析区域<>下行区域,ROW(分析区域)),IF(分析区域=E$5,ROW(分析区域)))=0,"",)))
{=AVEDEV(--FREQUENCY(IF(E6:E311<>E$5,ROW(6:311)),IF(E6:E311=E$5,ROW(6:311))))}这个公式将
当前最大连号  ={MAX(--FREQUENCY(IF(E6:E311=E$5,ROW(6:311)),IF(E6:E311<>E$5,ROW(6:311))))}
当前最大不连号间隔(连号遗漏)={MAX(--FREQUENCY(IF(E6:E311<>E7:E312,ROW(6:311)),IF(E6:E311=E7:E312,ROW(6:311))))}
当前最小不连号间隔={IF(SMALL(--FREQUENCY(IF(E7:E311<>E6:E310,ROW(6:310)),IF(E7:E311=E6:E310,IF(ROW(6:310)<COUNT(E6:E310)+1,ROW(6:310)))),1)>0,SMALL(FREQUENCY(IF(E7:E311<>E6:E310,ROW(6:310)),IF(E7:E311=E6:E310,IF(ROW(6:310)<COUNT(E6:E310)+1,ROW(6:310)))),1)-1,)}
求最大不重号数.JPG

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-10 10:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 万林 于 2011-11-10 11:50 编辑

=COUNTIF(E$6:E311,E$5)/ROWS(E$6:E311)*100

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-10 10:16 | 显示全部楼层
本帖最后由 万林 于 2011-11-10 11:55 编辑

设计VBA代码如下:
Sub 按选择期数查询排三走势()
Dim r As Long, r1 As Long, r2 As Long, r3 As Long
Dim sht As Worksheet, sht1 As Worksheet
Set sht = Sheets("排三走势")
Set sht1 = Sheets("排三开奖号码")
r = sht1.Range("A65536").End(xlUp).Row
r1 = Application.Match(sht.Cells(2, 2), sht1.Range("A3:A" & r), 0) + 2
r2 = Application.Match(sht.Cells(2, 7), sht1.Range("A3:A" & r), 0) + 2
If r1 - r2 >= 0 Then
MsgBox ("查询期数设置不正确,请重新设置!")
Else
r3 = sht.Range("A65536").End(xlUp).Row
sht.Range("A7:DS" & r3).Clear
sht1.Range("A" & r1 & ":A" & r2).Copy sht.[A6]
sht1.Range("B" & r1 & ":D" & r2).Copy sht.[B6]
sht.Range("E6:DS6").AutoFill Destination:=sht.Range("E6:DS" & r2 - r1 + 6), Type:=xlFillDefault '填充
r3 = sht.Range("A65536").End(xlUp).Row
sht.Range("A" & r3 + 2) = "当前出现次数"
sht.Range("A" & r3 + 3) = "当前最大遗漏"
sht.Range("A" & r3 + 4) = "当前最大连号"
sht.Range("A" & r3 + 5) = "当前最大不连号间隔"
sht.Range("A" & r3 + 6) = "当前最小不连号间隔"
'计算当前出现次数
sht.Range("E" & r3 + 2).Formula = "=COUNTIF(E$6:E" & r3 & ",E$5)"   '在编辑输入公式
sht.Range("E" & r3 + 2).Select
Selection.AutoFill Destination:=sht.Range("E" & r3 + 2 & ":DS" & r3 + 2)   ' 利用填充柄填充公式(是否可以引用数组区域直接填入公式呢?)
'计算当前最大遗漏
sht.Range("E" & r3 + 3).Formula = "=max(E$5:E" & r3 & ")"
sht.Range("E" & r3 + 3).Select
Selection.AutoFill Destination:=sht.Range("E" & r3 + 3 & ":DS" & r3 + 3)
'计算当前最大连号数
sht.Range("E" & r3 + 4).FormulaArray = _
"=MAX(FREQUENCY(IF(E6:E" & r3 & "=E$5,ROW(6:" & r3 & ")),IF(E6:E" & r3 & "<>E$5,ROW(6:" & r3 & "))))"
sht.Range("E" & r3 + 4).Select
Selection.AutoFill Destination:=sht.Range("E" & r3 + 4 & ":DS" & r3 + 4)
'计算当前最大的不连号间隔
sht.Range("E" & r3 + 5).FormulaArray = _
"=MAX(FREQUENCY(IF(E6:E" & r3 & "<>E7:E" & r3 + 1 & ",ROW(6:" & r3 & ")),IF(E6:E" & r3 & "=E7:E" & r3 + 1 & ",ROW(6:" & r3 & "))))"
sht.Range("E" & r3 + 5).Select
Selection.AutoFill Destination:=sht.Range("E" & r3 + 5 & ":DS" & r3 + 5)
'计算当前最小的不连号间隔
sht.Range("E" & r3 + 6).FormulaArray = _
"=SMALL(FREQUENCY(IF(E7:E" & r3 & "<>E6:E" & r3 - 1 & ",ROW(6:" & r3 - 1 & ")),IF(E7:E" & r3 & "=E6:E" & r3 - 1 & ",IF(ROW(6:" & r3 - 1 & ")<COUNT(E6:E" & r3 - 1 & ")+1,ROW(6:" & r3 - 1 & ")))),1)"
sht.Range("E" & r3 + 6).Select
Selection.AutoFill Destination:=sht.Range("E" & r3 + 6 & ":DS" & r3 + 6)

sht.Range("A" & r3 + 2 & ":DS" & r3 + 6).Font.Size = 10 '设置字号为10号

'以下是设置条件格式,以显示特别规律性
sht.Range("G" & r3 + 2 & ":AJ" & r3 + 3 & "").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=RANK(G" & r3 + 2 & ",$G" & r3 + 2 & ":$AJ" & r3 + 2 & ")<=5"
With Selection.FormatConditions(1).Font
        .Bold = True
        .ColorIndex = 3
End With
sht.Range("AT" & r3 + 2 & ":BA" & r3 + 3 & "").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=RANK(AT" & r3 + 2 & ",$AT" & r3 + 2 & ":$BA" & r3 + 2 & ")=1"
With Selection.FormatConditions(1).Font
        .Bold = True
        .ColorIndex = 3
End With
sht.Range("BK" & r3 + 2 & ":BR" & r3 + 3 & "").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=RANK(BK" & r3 + 2 & ",$BK" & r3 + 2 & ":$BR" & r3 + 2 & ")=1"
With Selection.FormatConditions(1).Font
        .Bold = True
        .ColorIndex = 3
End With
sht.Range("CB" & r3 + 2 & ":CI" & r3 + 3 & "").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=RANK(CB" & r3 + 2 & ",$CB" & r3 + 2 & ":$CI" & r3 + 2 & ")=1"
With Selection.FormatConditions(1).Font
        .Bold = True
        .ColorIndex = 3
End With
sht.Range("CQ" & r3 + 2 & ":CT" & r3 + 3 & "").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=RANK(CQ" & r3 + 2 & ",$CQ" & r3 + 2 & ":$CT" & r3 + 2 & ")=1"
With Selection.FormatConditions(1).Font
        .Bold = True
        .ColorIndex = 3
End With
sht.Range("DE" & r3 + 2 & ":DH" & r3 + 3 & "").Select
Selection.FormatConditions.Add Type:=xlExpression, Formula1:= _
        "=RANK(DE" & r3 + 2 & ",$DE" & r3 + 2 & ":$DH" & r3 + 2 & ")=1"
With Selection.FormatConditions(1).Font
        .Bold = True
        .ColorIndex = 3
End With

End If
Set sht = Nothing
Set sht1 = Nothing
End Sub

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-10 10:17 | 显示全部楼层
本帖最后由 万林 于 2011-11-10 11:51 编辑

上述红色部分代码如何优化?请高手指教。

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-10 10:35 | 显示全部楼层
为减小文件空间,附件中删除大量的历来开奖号码,现上传参考讨论,请各位帮助优化一下代码。

彩票最值分析.rar

276.83 KB, 下载次数: 268

TA的精华主题

TA的得分主题

 楼主| 发表于 2011-11-10 10:48 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
计算当前最小的不连号间隔
sht.Range("E" & r3 + 6).FormulaArray = _
"=SMALL(FREQUENCY(IF(E7:E" & r3 & "<>E6:E" & r3 - 1 & ",ROW(6:" & r3 - 1 & ")),IF(E7:E" & r3 & "=E6:E" & r3 - 1 & ",IF(ROW(6:" & r3 - 1 & ")<COUNT(E6:E" & r3 - 1 & ")+1,ROW(6:" & r3 - 1 & ")))),1)"
sht.Range("E" & r3 + 6).Select
Selection.AutoFill Destination:=sht.Range("E" & r3 + 6 & ":DS" & r3 + 6)

这部分代码有数时比实际数多1

TA的精华主题

TA的得分主题

发表于 2012-3-27 17:59 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2012-3-27 18:51 | 显示全部楼层
童真 发表于 2012-3-27 17:59
学习学习!

复杂的说。。。。

TA的精华主题

TA的得分主题

发表于 2012-3-27 19:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
看高手怎么优化{:soso_e113:}

TA的精华主题

TA的得分主题

发表于 2019-1-3 12:12 | 显示全部楼层
请问一下,最新间隔公式如何写,A列数据,B列为判断公式,能帮帮忙吗?谢谢!
判断组三组六,单双,大小,012路,谢谢了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-26 11:31 , Processed in 0.039883 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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