南希试图让Excel选择50个“数字”,每个数字包含八个随机字符。字符可以是数字或字母(大写或小写)。

如果您的随机数实际上是数字(仅数字),则生成它们将很容易。您需要做的就是以这种方式使用RANDBETWEEN函数(在Analysis ToolPak中):

=RANDBETWEEN(10000000,99999999)

但是,这不是南希想要的。她的随机“数字”也可以包含大写和小写字母。这变得有点粘性。

但是,有几种方法可以使用。

一种方法是将所有可能的字符放入单个单元格中,例如B7:

ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789

将该单元格命名为“ MySource”,例如。然后,您可以使用以下公式返回随机字符串:

=MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

& MID(MySource,RANDBETWEEN(1,LEN(MySource)),1)

公式很长;为了清楚起见,它已分成几行,但仍然是一个公式。它串联了从您输入到单元格B7中的源中提取的八个字符。

另一种方法是创建一个表,其中包含您希望在随机文本字符串中使用的所有字符。首先将数字1到62放入一列,每行一个数字。在这些数字的左侧放置您的字符-A,B,C,D等(这应该与您在上一技巧中在单元格B7中放置的字符相同。)选择62行的两列并为其命名,例如MyTable。然后,您可以使用以下公式生成随机字符:

=VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

& VLOOKUP(RANDBETWEEN(1,62),MyTable,2)

同样,请记住,这是一个公式,尽管它比以前的公式短一些。

到目前为止介绍的每种方法都有一个缺点:每次重新计算工作表时都会重新生成它们。因此,很难产生一个不会定期更改的随机生成的字符串。解决此问题的最佳方法是使用宏,但您不一定要使用用户定义的函数。为什么?因为它也会在每次重新计算工作表时更改其结果。

而是需要一个宏,该宏将从特定单元格位置开始将随机字符串放入工作簿中。以下是此类宏的示例:

Sub MakeRandom()

Dim J As Integer     Dim K As Integer     Dim iTemp As Integer     Dim sNumber As String     Dim bOK As Boolean

Range("D4").Activate     Randomize     For J = 1 To 50         sNumber = ""

For K = 1 To 8             Do                 iTemp = Int((122 - 48 + 1) * Rnd + 48)

Select Case iTemp                     Case 48 To 57, 65 To 90, 97 To 122                         bOK = True                     Case Else                         bOK = False                 End Select             Loop Until bOK             bOK = False             sNumber = sNumber & Chr(iTemp)

Next K         ActiveCell.Value = sNumber         ActiveCell.Offset(1, 0).Select     Next J End Sub

运行宏,并且单元格D4:D53中的所有内容都将被随机值覆盖。如果要将值写入不同的位置,请更改宏开头附近的Range语句。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(3872)适用于Microsoft Excel 97、2000、2002和2003。可以在以下功能区中为Excel的功能区界面(Excel 2007及更高版本)找到本技巧的版本: