今回は「数字が重複しないN桁の数値」を数式を作ります。
"数字が重複しない"とは例えば3桁数字の場合、"123"、"456"の様に3桁内の数字がすべて異なるものを指します。逆に"112"や"343"といった数字を"数字が重複する"と勝手に表現します。
目次
出来上がりイメージ
※[F9]キー(再計算)ボタンを押してランダム数値5桁を表示しています。
数式解説
数式はなるべく簡素に見えるよう、目的に合わせて分けながら記載しています。
ランダムな数値を作る
C列では各桁用にそれぞれランダムな数値が入る様な数式になっています。また重複は避けている為、1桁目の数値が2~5桁目と一緒になる事はなく、すべてが異なる数値となります。
以下の関数はC3セルに埋め込まれた数式です。「候補となる数字(D3セル)からMID関数を用いて1文字切り出す」という内容になっていますが、ROUND関数以下が見づらいので解説です。
RAND関数ではランダム値を生成する範囲を指定できるため「RAND()*D3セルの長さ-1」と指定します。「D3セルの長さ-1」とすることで実際には「0~10」のランダム値が生成されます。また、今回必要な数値は整数なのでROUND関数で囲うことで、ランダムな整数値となるようにしています。
また、生成されたランダム値はそのまま数字として使用するのではなく、D3セルへのMID位置に使用する事を目的としている為、"0"があってはなりません。そのため「+1」を補いつつ、D3セルの長さからは「-1」とすることでランダム値の範囲が「1~10」となるように調整しています。
候補となる数字を作る
候補となる数字は単純で、一番先頭の行は固定で「01234567890」と対象とする数字を入れつつ、以降の行では順次SUBSTITUTE関数をもって使用済の数字を除外していきます。
順次除外していくため1桁ずつ減っていきます。
候補となる数字の桁数が減っていくため、ランダム数値を作り出す数式においてもLENB関数を使用してMID関数が用いれるよう調整していたわけです。
ここの数字が出来上がったら、後は文字連結して完成です。
RAND関数は再計算でランダム値が再算出されるので、[F9]キー連打でテストしてみましょう。
「数字が重複しないN桁の数値」が必要な具体的な場面が想像できませんが、どこかで使えるといいなー。