对于许多人来说,一项常见的任务是从大量列表中选择一些随机名称。例如,您可能正在为您的社区举办竞赛,并且有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及更高版本)找到本技巧的版本: