玩全甲板游戏(Microsoft Excel)
小费标题怎么样?标题涉及以下事实:您可能需要以一系列随机数字填充一系列单元格。例如,您可能想要以随机顺序填充从1到52的52个单元格。 (这类似于从混洗的牌组中抽出卡牌,因此类似于提示标题。)
显然没有内置的Excel函数可以提供此功能,因此您只能使用宏。幸运的是,创建这样的宏并不是很困难。下面的宏可以很好地解决这个问题:
Sub FillRand() Dim nums() As Integer Dim maxval As Integer Dim nrows As Integer, ncols As Integer Dim j As Integer, k As Integer Dim Ptr As Integer Randomize Set s = Selection maxval = s.Cells.Count nrows = s.Rows.Count ncols = s.Columns.Count ReDim nums(maxval, 2) 'Fill the initial array For j = 1 To maxval nums(j, 1) = j nums(j, 2) = Int((Rnd * maxval) + 1) Next j 'Sort the array based on the random numbers For j = 1 To maxval - 1 Ptr = j For k = j + 1 To maxval If nums(Ptr, 2) > nums(k, 2) Then Ptr = k Next k If Ptr <> j Then k = nums(Ptr, 1) nums(Ptr, 1) = nums(j, 1) nums(j, 1) = k k = nums(Ptr, 2) nums(Ptr, 2) = nums(j, 2) nums(j, 2) = k End If Next j 'Fill in the cells Ptr = 0 For j = 1 To nrows For k = 1 To ncols Ptr = Ptr + 1 s.Cells(j, k) = nums(Ptr, 1) Next k Next j End Sub
该宏使用二维数组(数字)来确定要使用的数字以及应使用的顺序。在宏的开头附近,该数组填充有一个静态数(1到单元数)和一个介于1和单元数之间的随机数。然后,使用第二个数字对数组进行排序。一旦存储阵列,将原始数字放在单元格中就很简单了。
顺便说一句,使用二维数组的原因是因为VBA用于生成随机数的Rnd函数可以返回重复值。因此,即使数组的第二维可以在其中具有重复项,但当最终对数组进行排序时,第一维也不会具有重复项。
要使用宏,请先选择要随机填充顺序值的单元格。当您运行宏时,将填充该范围。例如,如果选择十个单元格然后运行宏,则这些单元格将以随机顺序填充数字1到10。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2280)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本:
全甲板玩。