为项目随机分配名称(Microsoft Excel)
Gary在工作表中有两个列表。其中一个在A列中包含我们公司的剩余项目列表,另一个在G列中包含名称列表。 B:F列中没有任何内容。 Gary希望为项目列表随机分配名称。 G列中的每个名称只能分配一次。如果名称多于项目,那么某些名称将不会被使用。如果名称少于项目,则某些项目将没有关联的名称。
有两种方法可以完成此操作。但是,也许最简单的方法是简单地为A列中的每个项目分配一个随机数。假设第一项位于单元格A1中,则将以下内容置于单元格B1中:
=RAND()
双击单元格B1中的填充手柄,您应该在A列中每个项目的右边以一个随机数(0到1之间)结束。
现在,选择B列中的所有单元格,然后按Ctrl + C将其复制到剪贴板。使用“选择性粘贴”将值直接粘贴回B列中的那些单元格中。(这会将单元格从公式转换为实际的静态值。)
|基于列B中的值,以升序对A列和B列进行排序。如果您查看各行,现在将获得与名称(列G)随机相关的项目(列A)。
即使没有必要,您也可以按照相同的步骤在每个名称的右边添加一个随机数,然后对名称进行排序。 (我说这是没有必要的,因为将项目随机化应该足以确保每个名称都有随机的项目。)
如果您仅需要偶尔进行一次随机配对,那么到目前为止讨论的技术非常有用。如果您需要经常执行此操作,则宏可能是一种更好的方法。当然,您可以使用许多不同的基于宏的方法。下面的方法假定项目列表在A列中,名称列表在G列中。它还假定第一列的每一列都有标题单元格。
如果名称多于项目,则宏会为项目随机分配名称。如果项目多于名称,它会为名称随机分配一些项目,并随机留下“空洞”(没有名称的项目)。它将它们存储在B列中,覆盖那里的内容。
Sub AssignNames() Set srItems = Range("A2").CurrentRegion Set srNames = Range("G2").CurrentRegion NameCount = srItems.Rows.Count - 1 ItemCount = srNames.Rows.Count - 1 'Randomize Names ReDim tempArray(NameCount, 2) For x = 0 To NameCount - 1 tempArray(x, 0) = Range("G2").Offset(x, 0) tempArray(x, 1) = Rnd() Next x 'Bubble Sort For i = 0 To NameCount - 2 For j = i To NameCount - 1 If tempArray(i, 1) > tempArray(j, 1) Then tempItem = tempArray(j, 0) tempName = tempArray(j, 1) tempArray(j, 0) = tempArray(i, 0) tempArray(j, 1) = tempArray(i, 1) tempArray(i, 0) = tempItem tempArray(i, 1) = tempName End If Next j Next i 'AssignNames Range("B2") = "Assigned" AssignCount = NameCount If NameCount > ItemCount Then AssignCount = ItemCount For x = 0 To AssignCount Range("B2").Offset(x, 0) = tempArray(x, 0) Next x End Sub
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(5682)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。