ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: hbhs2022

[已解决] 如何写这样的代码

[复制链接]

TA的精华主题

TA的得分主题

发表于 2023-6-16 18:31 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hbhs2022 发表于 2023-6-16 08:33
谢谢!晚上9点前睡觉,所以第二天才回复。

搞好了,请测试,有意见请发表。

效果如下图
image.jpg

TA的精华主题

TA的得分主题

发表于 2023-6-16 18:32 | 显示全部楼层
吴中泉 发表于 2023-6-16 18:31
搞好了,请测试,有意见请发表。

效果如下图

详见附件 图表快乐8.rar (55.93 KB, 下载次数: 2)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-16 19:04 | 显示全部楼层

谢谢你!完全正确,就是表格太长了,要拖动水平滚动条看。我一般是正常比例看。(100%)
我设置了40个单元格(两行,除了未开出号码是一行,其它是两行),不能往下填写。

TA的精华主题

TA的得分主题

发表于 2023-6-16 19:17 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
hbhs2022 发表于 2023-6-16 19:04
谢谢你!完全正确,就是表格太长了,要拖动水平滚动条看。我一般是正常比例看。(100%)
我设置了40个单 ...

实行两行显示可以,有点麻烦,我来帮你弄一下。
另外,未开出号码有可能占两行哟。
而本期重号只占一行。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-16 19:22 | 显示全部楼层
吴中泉 发表于 2023-6-16 19:17
实行两行显示可以,有点麻烦,我来帮你弄一下。
另外,未开出号码有可能占两行哟。
而本期重号只占一行 ...

未开出号码,不可能有20个号码(我统计的是最近7期的号码),因为快乐8开4期为一个周期,理论不会出现这么多。

TA的精华主题

TA的得分主题

发表于 2023-6-16 20:12 | 显示全部楼层
hbhs2022 发表于 2023-6-16 19:04
谢谢你!完全正确,就是表格太长了,要拖动水平滚动条看。我一般是正常比例看。(100%)
我设置了40个单 ...

又如你所愿,看效果图,觉得好给个“五星好评”吧

image.png

TA的精华主题

TA的得分主题

发表于 2023-6-16 20:13 | 显示全部楼层
  1. Sub ssjss() '2023.6.16 wzq
  2.     Dim i%, j%, s%, r%, L%, arr, brr
  3.     Sheet2.Activate
  4.     r = 8 '[C65536].End(3).Row
  5.     arr = Range("c1:V" & r).Value
  6.     Dim d As Object, d1 As Object
  7.     Set d = CreateObject("scripting.dictionary")
  8.     Set d1 = CreateObject("scripting.dictionary")
  9.     L = 20 '定义中奖号任意长度(个数)
  10.    
  11.     '求未开出号(用字典)
  12.     For i = 1 To 80: d(i) = "": Next
  13.     For i = 2 To r
  14.         For j = 1 To L
  15.             If d.exists(Val(arr(i, j))) Then
  16.                 d.Remove Val(arr(i, j))
  17.             End If
  18.         Next
  19.     Next
  20.     brr = d.keys
  21.     Call SelectionSort(brr)
  22.     Range("c10").Resize(1, d.Count) = brr
  23.    
  24.     '求连出号(用字典)
  25.     d.RemoveAll
  26.     For i = 3 To r
  27.         For j = 1 To L
  28.             d(Val(arr(i - 1, j))) = ""
  29.         Next
  30.         For j = 1 To L
  31.             If d.exists(Val(arr(i, j))) Then
  32.                 d1(arr(i, j)) = ""
  33.             End If
  34.         Next
  35.         d.RemoveAll
  36.     Next
  37.     brr = d1.keys
  38.     Call SelectionSort(brr)
  39.     Call array1to2(brr)
  40.     Range("c11").Resize(UBound(brr) + 1, L) = brr

  41.     '求本期重号(用字典)
  42.     d.RemoveAll:    d1.RemoveAll
  43.     For i = r To r
  44.         For j = 1 To L
  45.             d(Val(arr(i - 1, j))) = ""
  46.         Next
  47.         For j = 1 To L
  48.             If d.exists(Val(arr(i, j))) Then
  49.                 d1(arr(i, j)) = ""
  50.             End If
  51.         Next
  52.         d.RemoveAll
  53.     Next
  54.     brr = d1.keys
  55.     Call SelectionSort(brr)
  56.     Range("c13").Resize(1, d1.Count) = brr

  57.     '求下期斜连号(用字典)
  58.     d.RemoveAll:    d1.RemoveAll
  59.     For i = r To r
  60.         For j = 1 To L
  61.             s = Val(arr(i, j))
  62.             If s = 1 Then
  63.                 d(s + 1) = ""
  64.             ElseIf s = 80 Then
  65.                 d(s - 1) = ""
  66.             Else
  67.                 d(s - 1) = ""
  68.                 d(s + 1) = ""
  69.             End If
  70.         Next
  71.     Next
  72.     brr = d.keys
  73.     Call SelectionSort(brr)
  74.     Call array1to2(brr)
  75.     Range("c15").Resize(UBound(brr) + 1, L) = brr
  76. End Sub
  77. '选择排序
  78. Sub SelectionSort(arr)
  79.     Dim i&, j&, vSwap, min&
  80.     For i = 0 To UBound(arr) - 1
  81.         min = i
  82.         For j = i + 1 To UBound(arr)
  83.             If arr(min) > arr(j) Then min = j
  84.         Next
  85.         If min <> i Then
  86.             vSwap = arr(min): arr(min) = arr(i): arr(i) = vSwap
  87.         End If
  88.     Next
  89. End Sub
  90. '数组一维变二维
  91. Sub array1to2(arr)
  92.     Dim i%, j%, L%
  93.     L = UBound(arr) \ 20
  94.     ReDim brr(0 To L, 0 To 19)
  95.     For i = 0 To L
  96.         For j = 0 To 19
  97.             If i * 20 + j > UBound(arr) Then Exit For
  98.             brr(i, j) = arr(i * 20 + j)
  99.         Next
  100.     Next
  101.     arr = brr
  102. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2023-6-16 20:15 | 显示全部楼层
吴中泉 发表于 2023-6-16 20:12
又如你所愿,看效果图,觉得好给个“五星好评”吧

详见附件 图表快乐8.rar (55.14 KB, 下载次数: 4)

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-6-16 20:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助

哪里可以给个“五星好评”?我都不知道。鲜花都不够送,都送完了,还欠别人的鲜花。
谢谢!

TA的精华主题

TA的得分主题

发表于 2023-6-16 20:29 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
hbhs2022 发表于 2023-6-16 20:24
哪里可以给个“五星好评”?我都不知道。鲜花都不够送,都送完了,还欠别人的鲜花。
谢谢!

只有送外卖有五星好评,这里没有。

另外,昨天、今天上午我都帮你编写了程序,你还欠着我的花花呢
怎么感觉像要掌声
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-16 16:35 , Processed in 0.033567 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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