web-dev-qa-db-ja.com

アルファベットからランダムな長さのランダムな文字列を作成する方法は?

Excelのアルファベットからランダムな長さのランダムな文字列を作成したい。たとえば、「jlskdjf」、「kjlk」、「kljsodif」など。どうすればよいですか。

11
Jenny Hoang

ベーシック

小文字のアルファベット(a〜z)からランダムな長さ(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つのランダムな小文字のアルファベットを生成します。

小文字ではなく大文字のアルファベット(A〜Z)を使用するには、CHAR(Rand()*26+97)CHAR(Rand()*26+65)に置き換えます。なぜなら、ASCII A-Zのコードは65-90であり、ASCII a-zのコードは97-122だからです。

式を単純化するには、 RANDBETWEEN() of 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つ取得します。

14
wilson

うーん。 VBAでは、それを行う関数を作成するのはかなり簡単です。数式では、少し複雑になります。

  • =CHAR(RANDBETWEEN(97,122))は明らかに1文字を与えます。そのため、列Aに10個入れます。
  • 次に、次の列で、セルB1に_=A1_を入力します。
  • _=B1&A2_をB2に入れ、B2:B10を記入します。 (CONCATENATEはうっとうしく範囲を受け付けません。)
  • セルC2に=OFFSET(B1,RANDBETWEEN(0,9),0)を配置します。

配列数式などを使用すると、もっと簡単な方法があるかもしれません。

4
benshepherd

単一の文字の式として、これを使用できます

=CHAR(RANDBETWEEN(97,122))

任意のACSII-Tableを調べて、目的のRand範囲を選択します。

しかし、ランダムな長さはトリッキーです。ランダムな長さのためではなく、組み合わせたいランダムな文字のためです。それ以外の場合は、REPD関数を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なしで実行するソリューションがある場合、それについて知りたいと思います:)

2
Jook

この数式では、「abc ... ABC ... 012」のセルは必要ありません

[a-zA-Z0-9]のランダムな1文字。

=CHAR(CHOOSE(RANDBETWEEN(1,3),RANDBETWEEN(48,57),RANDBETWEEN(65,90),RANDBETWEEN(97,122)))

さらに文字が必要な場合は、CHAR(...)をコピーして、&で区切ります。

このソリューションはオークツリーからのものです http://www.mrexcel.com/forum/Excel-questions/332116-generate-random-alphanumeric-code.html

1
wannik

=LEFT(CHAR(RANDBETWEEN(97,122))&CHAR(RANDBETWEEN(97,122))&... repeat as many times as needed, RANDBETWEEN(minimum length, maximum length))

1

ランダムな文字を生成するには:

セルB1内

= CHAR(RANDBETWEEN(48,131))(または任意の文字セット)

これを列数まで埋めます=文字列に必要な最大文字数

ランダムな長さを生成するには

セルA1内

= LEFT(CONCATENATE(B1、C1、D1、E1、F1、G1、H1、I1、J1、K1)、RANDBETWEEN(0,9))

ランダムな文字列を生成するには

テーブル全体を列A1に入力します

0
JamieG

(文字のみの文字列が必要な場合は、以下の追加の段落を参照してください)

大文字のランダムな文字列と8〜12のランダムな長さの数字を生成します。=MID(BASE(Rand()*10^18,36,12),1,Rand()*4+8)

説明:

  1. 数字と大文字のランダムな文字列を生成します。長さは最小12です:BASE(Rand()*10^18,36,12)。トリックは、大きな乱数を生成し、それを基数36に変換して、文字列のように見える何かを取得することです。
  2. 文字列の長さRand()*4+8である8〜12の乱数を生成します
  3. (1)のように文字列の文字を1から(2)で生成した長さまで取ります。

式で使用される関数(裏返し):

  • 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つの選択肢はこれらの特性を失います。

0
CristianCantoro