![見出し画像](https://assets.st-note.com/production/uploads/images/67663074/rectangle_large_type_2_276c8fde8ce849f52e343e421cde59ae.png?width=1200)
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キーを押して、再生成している様子です。
![](https://assets.st-note.com/production/uploads/images/67663821/picture_pc_f29d7334e66d49c1dba14015b56226af.gif?width=1200)
31桁以上の乱数がほしいんだけど…
31桁以上の整数の乱数がほしい人がいるとは思えないですが、もし必要であれば、「REGEXREPLACE(TEXT(RANDARRAY(A2,B2),"0.000000000000000"),"0\.","")&」で繋げば15桁ずつ扱える桁が増えます。
ただし、計算量が増えるので程々に…
まとめ
あかやすの拙い知識ではゴリラ戦術しか思い浮かばなかったです。
もし、美しい調律が可能な人いらっしゃいましたら、コメントください。
いいなと思ったら応援しよう!
![あかやす](https://assets.st-note.com/production/uploads/images/14433968/profile_4a71e6a55c7c7019a3ebbb19ba513fc9.png?width=600&crop=1:1,smart)