回答:
小文字のアルファベット(az)からランダムな長さ(1〜8文字)の文字列を生成するとします。
=LEFT( CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97) &
CHAR(RAND()*26+97) & CHAR(RAND()*26+97),
RAND()*8+1)
それぞれCHAR(...)
が1つのランダムな小文字のアルファベットを生成します。
大文字のアルファベット(AZ)の代わりに、下部ケースを使用するには、置き換えることができCHAR(RAND()*26+97)
てCHAR(RAND()*26+65)
。AZのASCIIコードは65-90で、azのASCIIコードは97-122だからです。
数式を簡単にするためにRANDBETWEEN()
、Analysis Toolpakを使用してを置き換えることができますRAND()*xx+yy
。
特定の文字からランダムな長さ(1〜8文字)の文字列を生成するとします。
たとえば、セルA1に必要な文字を入力できます。
abcdefghijklmnopqrstuvwxyz1234567890!@#$%^&*()
そして、
=LEFT( MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1) &
MID($A$1,RAND()*LEN($A$1)+1,1) & MID($A$1,RAND()*LEN($A$1)+1,1),
RAND()*8+1)
それぞれMID(...)
がA1から1つのランダムな文字を取得します。
単一の文字の式として、これを使用できます
=CHAR(RANDBETWEEN(97,122))
ACSII-Tableを見て、希望するランド範囲を選択してください。
しかし、ランダムな長さは、ランダムな長さのためではなく、組み合わせたいランダムな文字のために、トリッキーです。それ以外の場合は、REPT関数をRAND関数と上記の数式で結合するだけです。
しかし、あなたが説明した結果に合わせるために、私はこのコードを使用します:
'Put this into a VBA-Module, to be accessable as a worksheet function
Public Function RandomString() As String
Dim i As Long
Dim lngEnd As Long
Dim strResult As String
With Application.WorksheetFunction
lngEnd = .RandBetween(1, 20) 'String length 1-20 characters
strResult = ""
'create a random string of a random length between 1 and 20
For i = 1 To lngEnd
strResult = strResult & Chr(.RandBetween(97, 122))
Next i
End With
Debug.Print strResult
RandomString = strResult 'return the random string
End Function
このコードを数式で、したがってVBAなしで実行するソリューションがある場合、それについて知りたいと思います:)
=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))
この数式では、「abc ... ABC ... 012」のセルは必要ありません
[a-zA-Z0-9]のランダムな1文字。
=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))
さらに文字が必要な場合は、CHAR(...)をコピーして、&で区切ります。
このソリューションはOaktree http://www.mrexcel.com/forum/excel-questions/332116-generate-random-alphanumeric-code.htmlからのものです
(文字のみの文字列が必要な場合は、以下の追加の段落を参照してください)
大文字のランダムな文字列と8〜12のランダムな長さの数字を生成します。
=MID(BASE(RAND()*10^18,36,12),1,RAND()*4+8)
説明:
BASE(RAND()*10^18,36,12)
。長さは最小12:です。秘訣は、大きな乱数を生成し、それを36進数に変換して、文字列のように見えるものを取得することです。RAND()*4+8
式で使用される関数(裏返し):
RAND()
0から1の間の乱数を返します。BASE(Number; Radix; [MinimumLength])
正の整数を指定された基数に変換して、番号付けシステムからのテキストにします。0〜9の数字とA〜Zの文字が使用されます。MID("Text"; Start; Number)
テキストのテキスト文字列を返します。パラメータは、開始位置と文字数を指定します。番号10^18
は、生成された文字列に後続ゼロまたは先行ゼロがないマジック番号です。より長い文字列を作成する必要がある場合は、そのような文字列を2つ以上作成して連結することをお勧めします。
注:このソリューションはLibreOffice Calc 5でテストされましたが、機能はドキュメントと同じであるため、Microsoft Excelでも機能するはずです(十分な評判がないためリンクできません)。
コメントで指摘されているように、OPが特に手紙のみを要求しているので、この代替バージョンを次の場所に投入します。
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",""),"1",""),"2",""),"3",""),"4",""),"5",""),"6",""),"7",""),"8",""),"9",""),1,RAND()*4+8)
ここで、すべての数字を空の文字列に置き換えます。このようにして、(大文字の)文字のみを取得します。マジックナンバーを調整して、最初のランダムな文字列に多くの桁がある可能性をカウントしました。フェイルセーフではありませんが、原則として、予想よりも短い文字列を取得できるという意味です。
最小の長さを確認する必要がある場合は、次の(さらに複雑な)代替案があります。
=MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(BASE(RAND()*10^22,36,16),"0",CHAR(RANDBETWEEN(65,90))),"1",CHAR(RANDBETWEEN(65,90))),"2",CHAR(RANDBETWEEN(65,90))),"3",CHAR(RANDBETWEEN(65,90))),"4",CHAR(RANDBETWEEN(65,90))),"5",CHAR(RANDBETWEEN(65,90))),"6",CHAR(RANDBETWEEN(65,90))),"7",CHAR(RANDBETWEEN(65,90))),"8",CHAR(RANDBETWEEN(65,90))),"9",CHAR(RANDBETWEEN(65,90))),1,RAND()*4+8)
ここで、各数字をランダムに生成された大文字に置き換えます。
私が他の回答で提供されたものに関して最初の解決策で気に入ったのは、それが簡潔で理解しやすいということです。2つの選択肢はこれらの特性を失います。
INDEX(B1:B10,RANDBETWEEN(1,10))