ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何依骰子点数和为7方式来配对舞伴?

如何依骰子点数和为7方式来配对舞伴?

作者:绿色风 分类: 时间:2022-08-17 浏览:120
楼主
liuguansky
Q:公司要搭配舞伴,男女摇骰子,点数和为7的互为舞伴[以先出现的和为7的异性为准],最后按舞伴里最早出现的人来排序。
A:用如下代码可以实现:
  1. Sub justtest()
  2. '前期绑定字典对象,引用VBE工具下MS SCRIPTING.RUMTIME
  3. Const K% = 7
  4. '定义常量数组 点数和为7
  5. Dim Arr(), Ar, i&, arrt() As New Dictionary, j As Byte
  6. Dim t&, ArrR(), A, B, t1
  7. '定义变量
  8. Application.ScreenUpdating = False
  9. '关闭屏幕刷新
  10. t1 = Timer
  11. ReDim Arr(1 To K - 1)
  12. '定义点数数组
  13. Ar = Range("A1").CurrentRegion.Value
  14. '获取摇点信息入数组
  15. For i = 1 To K - 1
  16.     '点数重建男女子字典
  17.     ReDim arrt(1 To 2)
  18.     Set arrt(1) = New Dictionary
  19.     Set arrt(2) = New Dictionary
  20.     Arr(i) = arrt
  21. Next i
  22. For i = 2 To UBound(Ar, 1) '循环记录
  23.     j = IIf(Ar(i, 2) = "男", 1, 2) '判断男女用于返回对应子字典
  24.     With Arr(K - Ar(i, 3))(3 - j) '引用匹配子字典对象
  25.         If .Count > 0 Then '如果存在记录,则返回匹配结果
  26.         t = t + 1 '累加匹配记录数
  27.         ReDim Preserve ArrR(1 To 3, 1 To t) '动态定义结果数组
  28.         A = .Keys: B = .Items '引用子字典数据
  29.         ArrR(3, t) = B(0) '赋值结果数组各项目
  30.         ArrR(j, t) = Ar(i, 1)
  31.         ArrR(3 - j, t) = A(0) '引用行号,作为排序关键字
  32.         .Remove A(0) '移除第一个匹配结果
  33.     Else '否则
  34.         Arr(Ar(i, 3))(j).Add Ar(i, 1), i '添加自身入子字典KEY
  35.     End If
  36. End With
  37. Next i
  38. Range("e2:f" & Rows.Count).ClearContents
  39. With Range("e2").Resize(t, 3)
  40.     .Value = Application.Transpose(ArrR) '返回结果数组
  41.     .Sort Range("g2"), xlAscending, Header:=xlNo '按标识位排序
  42. End With
  43. Range("g:g").Clear
  44. Application.ScreenUpdating = True
  45. MsgBox "配对成功。" & vbCrLf & "用时:" & Format(Timer - t1, "0.00000秒"), vbOKOnly
  46. End Sub
2楼
JOYARK1958
謝謝提供學習下載中

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap