見出し画像

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

この記事が気に入ったらサポートをしてみませんか?