いきなり答える備忘録

G Suite・Microsoft 365・LibreOfficeなどに関するメモと日々の実験

(Excel)ランダムな英数字の列を生成する

 Excelで、ランダムな英数字混合の文字列を生成する方法についてです。なお、英字は大文字のみとします。

  • RANDBETWEEN関数とBASE関数の組み合わせで、英数字の混じったランダムな文字列を生成することができます。
  • 長い文字列を作る場合や英字のみにする場合にはRANDARRAY関数とBASE関数の組み合わせを使います。

手順

数文字程度の英数字を作る場合

f:id:accs2014:20200120223352p:plain:right:w500

 ここでは8文字の英数字を生成するものとします。
 適当なセルに次のように入力します。

=BASE(RANDBETWEEN(0,36^8-1),36,8)

 RANDBETWEEN関数で0から36^8-1のランダムな整数を生成し、それをBASE関数により36進数の8桁の文字列に変換します(桁数はこのように指数部分とBASE関数の第3引数の2か所で指定します)。
 つまり00000000からZZZZZZZZまでのランダムな文字列が取得できるというわけです。
 

f:id:accs2014:20200120223356p:plain:right:w500

 実行結果はこうなります。

 

f:id:accs2014:20200120223400p:plain:right:w500

 さらに下方にドラッグした結果です。

 ただし長い文字列を生成しようとするとRANDBETWEENの引数が大きすぎてエラーになりますので次の例によることとなります。

長い英数字列を作る場合

f:id:accs2014:20200122014451p:plain:right:w600

 比較的長い文字列を生成する場合はRANDARRAY関数とBASE関数で1文字ずつ生成して結合するという方法をとります。
 画像は結果で、B2セル以降のセルに次の式を入力しています。

=CONCAT(BASE(RANDARRAY(30,1,0,35,TRUE),36))

 RANDARRAY関数の第1引数(30)により、生成するランダムな整数の個数(結果的に文字列の長さ)を指定しています。
 BASE関数との組み合わせにより0~Zの英数字を1文字ずつ生成してCONCAT関数で結合しています。

英字のみの列を作る場合

f:id:accs2014:20200122014447p:plain:right:w600

 英字だけの文字列を生成する場合もRANDARRAY関数とBASE関数で1文字ずつ生成して結合します。
 画像は結果で、B2セル以降のセルに次の式を入力しています。

=CONCAT(BASE(RANDARRAY(8,1,10,35,TRUE),36))

 RANDARRAY関数により生成される最小の数値を10としているため0~9の数字(文字)が生成されません。

一般的なパスワードの生成

 一般的なパスワードを生成する場合は、大文字と小文字を併用したり紛らわしい文字(1とI、0とOなど)の使用を制限するなどの条件が求められます。これについては次の記事で紹介しています。

www.officeisyours.com