ウェブアプリケーションの開発時など、入力データとしてランダムな文字列を持つ Excel データを扱うことってありませんか?
ランダムな数字列であれば、RAND関数を利用して生成すればよいですが、ランダムな文字列を求める関数はありません。
テスト用キーワード、グループ名などランダムな文字列を利用して大量のデータをインポートする場面、稀にあるとおもいます。
そんなときに思い出してあげてください。笑
ただし、当然ですが、制約はあります!!!
DEC2HEX関数を使おう!
ほぼ答えです。笑
アルファベットを含む文字列を生成する方法として16進数を使いましょう、ということです。
勘の言い方ならお気づきかもしれませんが、変換元の10進数をランダムにすればいいじゃん!そういうことです。
10進数は私たちが一般的に利用する「0から9」を用いて数を表現する方法です。10 になると桁があがります。
対して、16 進数は「0からF」までを用いて数を表現します。
では、実際にDEC2HEX関数を使って、16進数へ変換してみましょう。
以下の関数を好きなセルにいれてみてください。
=DEC2HEX(549755813887,10)
するとどうでしょうか?以下のように 10 桁の文字列が得られたでしょうか?
7FFFFFFFFF
このように10進数を16進数に変換することでアルファベットを含む文字列を生成することができます。
では、次にこの変換する元となる10進数をランダムにしてみましょう。
RANDBETWEEN関数と組み合わせてランダム性を持たせる!
続いて、RANDBETWEEN関数と組み合わせることで10進数をランダムに生成させていきます。
RANDBETWEEN関数は最小値と最大値を指定することで、その間の値をランダムに取得することができます。
RANDBETWEEN(最小値, 最大値)
RANDBETWEEN 関数の書式には、次の引数があります。https://support.microsoft.com/ja-jp/office/randbetween-%E9%96%A2%E6%95%B0-4cc7f0d1-87dc-4eb7-987f-a469ab381685
- 最小値 必ず指定します。 乱数の最小値を整数で指定します。
- 最大値 必ず指定します。 乱数の最大値を整数で指定します。
先ほどの DEC2HEX関数の例として書いてもらった「549755813887」というのは DEC2HEX関数で扱える最大値となります。
そのため、0 から 549755813887 までをランダムに取得するように先程の DEC2HEX関数に組み込みます。
以下の関数をセルにいれてみてください。
=DEC2HEX(RANDBETWEEN(0,549755813887),10)
ただし、この方法では関数の制限上、以下の制約が発生します。以降の章で対応できるものは対応しますが、対応できないものもあります。
・10桁のランダム英数字しか作成できない(DEC2HEX関数が10桁の16進数までの変換しか対応できない)
・ランダム英数字と言っても英字は「A から F」までしか使われない(16進数なので)
するとどうでしょうか?以下のようなランダムな10文字な英数字を得られたでしょうか?
0F4407804C
06C0B8422D
0A299E5B64
0C057EFFD4
3EA190BD59
あくまでランダムですので上記と一緒になることはないとおもいますが、あとはこのセルをコピーすることで 10文字のランダム英数字を大量に生成することができます。
ただし、このままではシートを開き直したりする度に再計算され、値が変化してしまいます。
そのため、次はこの生成したランダム英数字を値として固定化する必要があります。
ランダム英数字を「値として貼り付け」して固定化する!
RANDBETWEEN関数はシートを開き直す度に再計算されるため、DEC2HEX関数で生成されるランダム英数字が毎回新しいものになります。
生成したランダム英数字を「値として貼り付ける」ことで再計算されても変更されないようにします。
関数を入力したセルを右クリックして、コピーを選択したあと、再度右クリックして「形式を指定して貼り付け」を選択します。
※筆者の都合上、Excelの画像ではありません。ただ、Excelでも似たような項目はあり、流れも同様になりますので探してください。
以下のようなダイアログが表示されるので「値」を選択して「元のセルと同じ位置に」上書きするように貼り付けをします。
どうでしょうか?以下のようにセルの内容がランダム英数字に置き換えられ、固定化されましたでしょうか?
このようにすることで、ランダム英数字を確定させてデータとして利用することが可能となりました。
もっと長いランダム英数字にしよう!
上述していますが、この方法では 10 文字のランダム英数字しか得ることができないので「テストデータとして利用するには短い」ということもあるかと思います。
この先ほど作成した関数を結合することでもっと長いランダム英数字にしてみましょう。
やり方は、、、、「&」でつなぐだけです笑
さっそく以下の関数をセルにいれてみてください。
=DEC2HEX(RANDBETWEEN(0,549755813887),10)&DEC2HEX(RANDBETWEEN(0,549755813887),10)
するとどうでしょうか?以下のようなランダムな20文字な英数字を得られたでしょうか?簡単ですね。
53374974BA34FB6233FE
61CF63177F7728A4E584
5A11954D30774C231A05
192D66B76A39E2FBDAB2
6724A7A3BB039234CA94
このように文字列結合することでより長いランダム英数字を生成することもできます!
いかがだったでしょうか?
Excelでテストデータを作成する機会は多いものの、ランダムな英数字を作成する方法がすぐに思いつかないことも多かったので書いてみました。
この記事が1人でも多くの人の手助けになれば嬉しいです!
コメント