选择随机名称(Microsoft Excel)
对于许多人来说,一项常见的任务是从大量列表中选择一些随机名称。例如,您可能正在为您的社区举办竞赛,并且有1,000人参加。在表的每一行中都有它们的名称,您可能想知道如何随机选择一定数量的名称。
与Excel一样,您可以采用多种方法。本技巧中介绍的每种方法都假定您需要从中选择的名称在单元格A1至A1000中列出。
当然,您的名称范围可以更短或更长,但要点是它们在A列的连续单元格中。这些示例还假定您需要从列表中随机选择15个名称。
第一种方法是使用INDEX函数。在单元格B1:B15中输入以下公式:
=INDEX(A:A,INT((RAND()*1000)+1),1)
一个类似的公式使用OFFSET函数:
=OFFSET($A$1,ROUNDUP(RAND()*1000,0),0,1,1)
在结果列表中,有可能(但不可能)获得两次相同的名称。 (不可能的原因是原始列表的大小。列表越大,提取的列表中出现重复的可能性就越小。)如果确实有重复的名称,则只需按F9强制重新计算工作表即可。 。每次重新计算时,都会重新提取提取的名称列表。
另一种可能的方法要求使用多列。只需遵循以下步骤:
。在单元格B1中输入= RAND()。
。在单元格C1中输入以下公式:
。选择范围B1:C1,然后向下填充到第1000行。 。选择范围B1:C1000。
。按Ctrl + C将范围复制到剪贴板。
。从编辑菜单中选择选择性粘贴。 Excel将显示“选择性粘贴”对话框。 (请参见图1。)
。确保选中值单选按钮。
。单击确定。现在,您在B1:C1000中有了静态值,这意味着每次重新计算工作表时它们都不会改变。
。在C列中选择一个单元格。 。从数据菜单中选择排序。 Excel将显示“排序”对话框。
(请参见图2。)
。单击确定。 |(||||)表(范围A1:C1000)根据C列中的值排序。
结果是C列现在包含B列中所有随机数的排名。前15行包含您的随机名。
在这种方法中,您还可以完全忽略C列,并根据B列中的静态随机值对列表进行简单排序。同样,前15名将是您的随机名称。
当然,可以使用许多宏解决方案来解决此问题。依靠VBA的RND函数生成随机数,任何宏的编码都将相似。在所有可能的宏解决方案中,以下可能是最独特的,并提供了迄今为止讨论的工作簿解决方案无法提供的一些优势:
要使用此宏,只需选择要从中选择15个随机名称的名称。在到目前为止的示例中,您将选择范围A1:A1000。宏然后从单元格中随机抽取15个名称,并将其放入剪贴板。运行宏时,可以将剪贴板的内容粘贴到所需的任何位置。每次运行宏时,都会选择15个不同的组。
注意:
Sub GetRandom() Dim iRows As Integer Dim iCols As Integer Dim iBegRow As Integer Dim iBegCol As Integer Dim J As Integer Dim sCells As String Set TempDO = New DataObject iRows = Selection.Rows.Count iCols = Selection.Columns.Count iBegRow = Selection.Row iBegCol = Selection.Column If iRows < 16 Or iCols > 1 Then MsgBox "Too few rows or too many columns" Else Randomize Timer sCells = "" For J = 1 To 15 iWantRow = Int(Rnd() * iRows) + iBegRow sCells = sCells & Cells(iWantRow, iBegCol) & vbCrLf Next J TempDO.SetText sCells TempDO.PutInClipboard End If End Sub
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(2811)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: