【Excel】任意の文字を使った任意長のランダム文字列を式で作る

 Excel上でランダムな文字列を生成したい時があります。これをなるべく楽に短い式で他のセルへの依存を制御した形で作ると次のようになります。

# 12は生成する文字数です。
# ↓なら例えば「コタエフナソヲササルルト」「テキワヤチエイロハコエミ」「ツロキシヘニンセヲココワ」といった文字列が生成されます
=TEXTJOIN("", TRUE, MAP(SEQUENCE(12), LAMBDA(x, MID("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン", RANDBETWEEN(1, LEN("アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヲン")),1))))

# 他セルを使うならば次のようにも書けます。A1に文字セットが入ります。
=TEXTJOIN("", TRUE, MAP(SEQUENCE(12), LAMBDA(x, MID(A1, RANDBETWEEN(1, LEN(A1)),1))))

 ざっくり言うとMID(A1, RANDBETWEEN(1, LEN(A1)),1)でランダムな一文字を得られる様にし、SEQUENCEで作った連続した数値をMAPを使ってランダムな文字に置き換え、TEXTJOINでつなげる、という式です。注意点としてこのランダム生成式を埋め込んだセルが何万何十万と増えるとExcelが重くなる点があります。操作の度にランダム文字列を生成しなおすため、何かする度に待ち時間がでてしまいます。おすすめの解決方法はランダム文字列を一度生成したら、それをコピーして値として貼り付けることです。そうすると再計算が行われないため軽くなります。

 ちなみに文字列セットの中からランダムに文字列を選ぶのであれば、他セルにその文字列セットを配置して次のように呼び出すことができます。

# B1:B46の範囲に都道府県名がセットされてる前提で都道府県をランダムに呼び出します
=INDEX(B:B, RANDBETWEEN(1, 46))

 余談ですが上記のランダム文字列生成式でも使っているTEXTJOIN("", TRUE, MAP(SEQUENCE(N), LAMBDA(x, 任意の処理)))というのはランダムであったり連続であったりする何かを繰り返し連結しするのに便利な書き方です。これを使うと一つのセルの中でループが記述でき、より自由なことができます。例えば次のようなことができます。

# Unicodeのコードポイントの連番から文字列を得ます
# 12352なら「ぁあぃいぅうぇえぉお」となります。「あいうえお」にするならSEQUENCE'(5)、UNICHAR(12352+ x * 2)にします。
=TEXTJOIN("", TRUE, MAP(SEQUENCE(10), LAMBDA(x, UNICHAR(12352 + x))))
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG