いきなり答える備忘録

Google Workspace・Microsoft 365・LibreOfficeなどに関するメモ

(Gスプレッドシート)ランダムなパスワードを生成する

 Googleスプレッドシートで、使用できる文字と文字数を指定して簡易なパスワードを作る方法についてです。

  • MID関数やRANDARRAY関数等を組み合わせてパスワード(ランダムな文字列)を作ることができます。

手順

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

 画像ではB3セルに入力された使用文字(パスワードに使用できる文字)とC3セルに入力された長さ(パスワードの文字数)に基づき、E3セル上にパスワードを生成しています。

 E3セルの式は次のようなものです。

=CONCATENATE(ARRAYFORMULA(MID(B3,RANDARRAY(C3)*LEN(B3)+1,1)))

 「RANDARRAY(C3)*LEN(B3)+1」の部分により、「1から『使用文字の文字数』」までのランダムな数を、「長さ」の数だけ生成しています。これに基づきMID関数で「使用文字」から1文字ずつピックしてCONCATENATE関数で結合しています。「RANDARRAY(C3)*LEN(B3)+1」は整数ではありませんがMID関数では小数部分が無視されるのでINT関数等を用いなくても問題ありません。
 なお、式のこの部分のはたらきについては下記注意点も併せて参照願います。
 

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

 式を下方にフィルコピーした結果です。
 4番目(6行目)の例では、同じ文字を複数回指定することで文字の出現率を調整しています。

 

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

 注意点です。公式解説によるとRANDARRAY関数は0以上1以下の値を生成することになっているので、上記の式中の「RANDARRAY(C3)*LEN(B3)+1」の部分が「使用文字の文字数+1」を生成しないとも限りません。このときMID関数は何も拾わないので生成されるパスワードが短くなるものと考えられます。
 もし発生するにしても余りにレアすぎるため普通は気にしないのですが、念のためこれに対応する例としては次のような式が挙げられます。

=CONCATENATE(ARRAYFORMULA(MID(B3&RIGHT(B3,1),RANDARRAY(C3)*LEN(B3)+1,1)))

 MID関数の第1引数を「B3&RIGHT(B3,1)」とすることで、使用文字に1文字(使用文字の最後の1文字)を足しています。RANDARRAY関数が1を返す可能性を考慮すると、抽出の偏りはほぼないものと考えられます。