ナンシーは、それぞれが8つのランダムな文字を含む50の「数字」をExcelに選択させようとしています。文字は数字または文字(大文字または小文字)のいずれかです。

乱数が実際に数字(数字のみ)である場合、それらを生成するのは簡単です。あなたがする必要があるのは、このように(分析ツールパックの)RANDBETWEEN関数を使用することだけです:

=RANDBETWEEN(10000000,99999999)

しかし、これはナンシーが望んでいることではありません。彼女のランダムな「数字」には、大文字と小文字も含めることができます。これは少し粘着性になります。

ただし、使用できるアプローチはいくつかあります。

1つのアプローチは、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)

式は長いです。わかりやすくするために個々の行に分割されていますが、それでも1つの式です。セルB7に入力したソースからプルされた8文字を連結します。

別のアプローチは、ランダムなテキスト文字列に必要なすべての文字を含むテーブルを作成することです。 1から62までの数字を列に配置し、各行に1つずつ配置することから始めます。これらの数字の左側に、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)

繰り返しになりますが、これは前の式より少し短いですが、単一の式であることを忘れないでください。

これまでに提示された各アプローチには、1つの欠点があります。それは、ワークシートが再計算されるたびに再生成されることです。したがって、定期的に変更されない単一のランダムな文字列を生成することは困難です。これを回避する最善の方法はマクロを使用することですが、必ずしもユーザー定義関数を使用する必要はありません。どうして?それも、ワークシートが再計算されるたびに結果が変わるためです。

代わりに、特定のセル位置からランダムな文字列をブックに配置するマクロが必要です。以下はそのようなマクロの例です:

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_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(3872)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。