Googleスプレッドシートで16桁以上の整数の乱数を生成する
何故こんな(変態な)事をしたのか
仮のクレジットカード番号(16桁)がほしいなと思ったのがきっかけです。コド作ったけど、「あれ、15桁しか生成できないじゃん」みたいな。
数値で扱える桁数について
色々試しましたが、どう頑張っても15桁しか扱えません。これ以上の桁は0で置き換わるようです(あかやす体験談)。挙動を見る限りオーバーフローですね。
Googleの桁数に関するドキュメントは見つけられませんでしたが、Exceでは15桁しか扱えないと表記しているので、スプレッドシートでも同じと考えて良いかと思います。
https://docs.microsoft.com/ja-jp/office/troubleshoot/excel/last-digits-changed-to-zeros
打開策
数値で扱える桁が15桁なのであれば、文字列に変えれば良いのです(強引)。
コード
以下は30桁までの整数の乱数を生成するコードです。
=ARRAYFORMULA(
REGEXEXTRACT(
REGEXREPLACE(TEXT(RANDARRAY(A2,B2),"0.000000000000000"),"0\.","")&
REGEXREPLACE(TEXT(RANDARRAY(A2,B2),"0.000000000000000"),"0\.",""),
"\d{1,"&C2&"}$"
)
)
A2セルに行数、B2セルに列数、C2列に桁数を指定します。エラー処理はしていないので、0以下の数値が入ると#N/Aになります。
以下のGIFは、適当なセルの上でDeleteキーを押して、再生成している様子です。
31桁以上の乱数がほしいんだけど…
31桁以上の整数の乱数がほしい人がいるとは思えないですが、もし必要であれば、「REGEXREPLACE(TEXT(RANDARRAY(A2,B2),"0.000000000000000"),"0\.","")&」で繋げば15桁ずつ扱える桁が増えます。
ただし、計算量が増えるので程々に…
まとめ
あかやすの拙い知識ではゴリラ戦術しか思い浮かばなかったです。
もし、美しい調律が可能な人いらっしゃいましたら、コメントください。
ここから先は
0字
¥ 300
この記事が気に入ったらサポートをしてみませんか?