ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助:怎么利用VBA实现排列组合,进行分组排序?谢谢!

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2012-7-19 09:27 | 显示全部楼层 |阅读模式
本帖最后由 fanchunke1991 于 2012-7-19 11:28 编辑

想利用VBA进行排列组合,解决一个实际的问题。
说明:要对学生进行宿舍的分配,学生来源于20个不同的学校,要求每个宿舍6人,他们要来源于不同的学校,也就是同一个学校的学生不能住在同一个宿舍。具体的要求在附件里面。
本人初学VBA,所以有些复杂的问题自己还是不能解决,还希望各位VBA高手能帮忙解决,不胜感激!
宿舍分配.rar

宿舍分配.rar

6.44 KB, 下载次数: 110

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2012-7-19 09:54 | 显示全部楼层
这个题目很实用,不过有点棘手.

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-19 09:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
bluexuemei 发表于 2012-7-19 09:54
这个题目很实用,不过有点棘手.

还请这位老师帮帮忙,看能不能解决。谢谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-19 10:32 | 显示全部楼层
本帖最后由 fanchunke1991 于 2012-7-19 11:12 编辑

有高手吗?求求帮帮忙!{:soso_e154:}

TA的精华主题

TA的得分主题

发表于 2012-7-19 12:14 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
用笨笨的方法写下:没有填充颜色的为还没有分配宿舍:

宿舍分配.rar

15.08 KB, 下载次数: 50

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-19 13:15 | 显示全部楼层
TOO-布丁 发表于 2012-7-19 12:14
用笨笨的方法写下:没有填充颜色的为还没有分配宿舍:

非常感谢。不过每一个分组中学校的排列组合能不能更分散一些,更随机一些?

TA的精华主题

TA的得分主题

发表于 2012-7-19 13:17 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
短信收到,请测试:
  1. Sub Macro1()
  2.     Dim arr(1 To 2), brr(), i&, j&, m&, n&, r&, l&, d As Object, ds As Object
  3.     Set d = CreateObject("scripting.dictionary")
  4.     Set ds = CreateObject("scripting.dictionary")
  5.     m = [d:d].Find("女", , , xlWhole).Row
  6.     arr(1) = Range("a2:d" & m - 1)
  7.     arr(2) = Range("a" & m & ":d" & [a65536].End(3).Row)
  8.     Columns("G:J").ClearContents
  9.     [g1:j1] = Array("宿舍号", "姓名", "学校", "性别")
  10.     For l = 1 To 2
  11.         For i = 1 To UBound(arr(l))
  12.             ds(i) = ""
  13.         Next
  14.         ReDim brr(1 To UBound(arr(l)), 1 To 4)
  15.         lr = UBound(arr(l))
  16.         r = 0
  17.         For i = 1 To WorksheetFunction.RoundUp(lr / 6, 0) - 1
  18.             Do
  19.                 n = Int((lr * Rnd) + 1)
  20.                 If Len(arr(l)(n, 3)) Then
  21.                     If Not d.Exists(arr(l)(n, 3)) Then
  22.                         r = r + 1
  23.                         d(arr(l)(n, 3)) = ""
  24.                         brr(r, 1) = i
  25.                         For j = 2 To 4
  26.                             brr(r, j) = arr(l)(n, j)
  27.                         Next
  28.                         arr(l)(n, 3) = ""
  29.                         ds.Remove (n)
  30.                     End If
  31.                 End If
  32.             Loop Until d.Count = 6
  33.             d.RemoveAll
  34.         Next
  35.         k = ds.keys
  36.         m = i
  37.         For i = 0 To ds.Count - 1
  38.             r = r + 1
  39.             brr(r, 1) = m
  40.             For j = 2 To 4
  41.                 brr(r, j) = arr(l)(k(i), j)
  42.             Next
  43.         Next
  44.         [g65536].End(3).Offset(1).Resize(lr, 4) = brr
  45.         ds.RemoveAll
  46.     Next
  47. End Sub

复制代码

TA的精华主题

TA的得分主题

发表于 2012-7-19 13:17 | 显示全部楼层
请看附件
宿舍分配.rar (18.5 KB, 下载次数: 177)

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2012-7-19 13:24 | 显示全部楼层
zhaogang1960 发表于 2012-7-19 13:17
请看附件

非常感谢版主的帮助,真的很有用,谢谢!

TA的精华主题

TA的得分主题

发表于 2012-7-19 14:38 | 显示全部楼层
zhaogang1960 发表于 2012-7-19 13:17
请看附件

不断重复运行程序,有时候会处于没有响应状态,不知什么原因?

2012-07-19_143647.jpg
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 19:34 , Processed in 0.040694 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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