代码如下:
Sub MakeGroups()
Application.ScreenUpdating = False
Dim class As Range
Dim Members As Range
groupSize = Int(Range("number_per_group"))
If groupSize < 3 Then
MsgBox "“每组人数”不能少于2人!"
Range("number_per_group").Select
Exit Sub
End If
Set class = Range("A2", Range("A2").End(xlDown))
n = class.Rows.Count
Set Members = Range("e2", Range("f2").Offset(n - 1, 0))
For i = 1 To class.Rows.Count
Members(i, 1) = class(i)
Randomize
Members(i, 2) = Rnd()
Next i
Members.Sort Members.Columns(2)
ActiveSheet.Columns(3).Clear
Range("c1").Select
ActiveCell = "小组"
ActiveCell.Font.Bold = True
ActiveCell.Offset(1, 0).Select
ActiveCell.Font.Bold = True
randomMember = 1
For groupNumber = 1 To n \ Range("number_per_group")
ActiveCell = "小组" & groupNumber
ActiveCell.Font.Bold = True
For groupMember = 1 To groupSize
ActiveCell.Offset(groupMember, 0) = Members(randomMember, 1)
randomMember = randomMember + 1
Next groupMember
ActiveCell.Offset(groupMember + 1, 0).Select
Next groupNumber
leftovers = n - (randomMember - 1)
If leftovers > 1 Then
ActiveCell = "Group " & i
ActiveCell.Font.Bold = True
ActiveCell.Offset(1, 0).Select
Else
ActiveCell.Offset(-1, 0).Select
End If
For i = 1 To leftovers
ActiveCell = Members(randomMember, 1)
ActiveCell.Offset(1, 0).Select
randomMember = randomMember + 1
Next i
ActiveSheet.Columns(5).Clear
ActiveSheet.Columns(6).Clear
Application.ScreenUpdating = True
End Sub
代码中,比如一个Range对象后面用一个数字做参数,上面代码中:class(1) 这种,代表什么意思?像Range("c1") , Range("f1") 这种参数中用小写字母的,是代表单元格C1,F1吗?还是小写字母代表其他意思,没看明白,跪求高手注释详解给我这菜鸟学习学习,万分感激~
class(i) 是代表class中第i行单元格的值,还是单元格本身?
追答class(i)是代表class中第i行单元格这个完整对象,继承了这个单元格对象的所有属性、方法
例如:
Set class = Range("A2", Range("A2").End(xlDown)) 指明class是A列的一系列单元格对象集合
于是,class(1)就代表这个集合中的第一个对象,即A1单元格这个对象
class(1)就相当于range("A1")
class(1).value是A1单元格的值
class(1).row是A1单元格的行号
class(1).copy可以复制A1单元格
……
Set Members = Range("e2", Range("f2").Offset(n - 1, 0))
For i = 1 To class.Rows.Count
Members(i, 1) = class(i)
Randomize
Members(i, 2) = Rnd()
Next i
Members.Sort Members.Columns(2)
把class(i)对象赋值给Members(i,1)对象? 赋值的结果是什么?Member(i,1)会得到class(i)的所有属性和方法?比如说,class(1)填入了数值,Member(i,1)都能取到?
这一段只是简单的单元格填充
range对象的默认属性是value
现在,Members和class都是range对象集合
Members(i, 1) = class(i) 就相当于 Members(i, 1).value = class(i).value
只是将单元格class(i)的值填充到单元格Members(i, 1)中
单元格Members(i, 1)具有那个单元格的所有属性,但单元格Members(i, 1)不是单元格class(i)
再解释一下吧
Members是E、F两列的单元格区域,Members(1,1)就是单元格E2
class(1)是单元格A2
Members(1, 1) = class(1) 就是把A2的内容填到E2中
但很明显,Members(1, 1) 不是 class(1),改变class(1)的内容,Members(1, 1) 不会改变
class.Rows.Count 没错啊,定义出来的一个区域是一列数字,而且程序跑出来的结果都符合预期的,这有什么问题吗?
本回答被网友采纳