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


回答:


14

ベーシック

小文字のアルファベット(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つのランダムな文字を取得します。


4

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

  • =CHAR(RANDBETWEEN(97,122))明らかにあなたに一文字を与える。そのため、列Aに10個入れます。
  • 次に、次の列=A1にセルB1を入力します。
  • 入れ=B1&A2B2に、そしてB2フィルダウン:B10を。(面倒なことに、CONCATENATEは範囲を受け入れません。)
  • セルC2にを入れ=OFFSET(B1,RANDBETWEEN(0,9),0)ます。

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


1
1 -私は方法があるはずです知っていた-のように-しかし、私はむしろINDEXの代わりに、OFFSET使用するであろうINDEX(B1:B10,RANDBETWEEN(1,10))
Jook

2

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

=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なしで実行するソリューションがある場合、それについて知りたいと思います:)


1

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


これがどのように機能するかについてのもう少しコンテキストが答えを本当に改善するでしょう。
ブルギ、


0

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

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

説明:

  1. 数字と大文字のランダムな文字列を生成しますBASE(RAND()*10^18,36,12)。長さは最小12:です。秘訣は、大きな乱数を生成し、それを36進数に変換して、文字列のように見えるものを取得することです。
  2. 文字列の長さ8〜12の乱数を生成します RAND()*4+8
  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つの選択肢はこれらの特性を失います。


OPは特にアルファベット文字のみを求めていました。これに対処するために回答を編集できますか?
music2myear 2017年

@ music2myearは完了しましたが、この方法では元のバージョンの簡潔さが失われます。
CristianCantoro

簡潔さは、ニーズを満たす場合にのみ役立ちます。この回答は長いですが、OPが尋ねた特定の質問に実際に回答するため、より優れています。
music2myear 2017年

0

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

セルB1内

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

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

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

セルA1内

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.