GoogleスプレッドシートはMath.random()で乱数を生成します


7

次のように、Javascript Math.random()を呼び出して[0、1)の間の乱数を生成するスクリプト関数を記述しようとしています。

function f() {
  return Math.random();
}

そして私はそれを細胞から呼びます:

乱数

しかし、私は(使用してスプレッドシートを更新するたびにF5、またはCtrl+がR)、それは同じ番号を返します。

スプレッドシートRAND()関数を使用していない理由は、でいくつかの複雑な計算を実行したいためですf()RAND()スプレッドシートからパラメーターとして渡して、パラメーターを返すことを試みましたが、その場合、この関数は決して戻りません。

乱数2

関数内から更新可能な乱数を生成する方法はありますか?


= rand()の結果をヘルパー列に入れて、その列の内容を関数に渡すことはできますか?これにより、表示されているハング動作が解決される場合があります。
MaryC.fromNZ 2014

回答:


3

簡潔な答え

カスタム関数を使用する代わりに、可能な場合は組み込み関数を使用するか、イベントによってトリガーされる関数を使用します。

説明

OPで述べたように、Googleスプレッドシートには、0から1:RANDまでの乱数を返す組み込み関数があります。

組み込み関数では不可能または効率的でない複雑な計算を実行する必要がある場合、1つの代替策はGoogle Appsスクリプトを使用することです。カスタム関数は、引数の1つが変更された場合にのみ再計算され、反対側では引数が確定的である必要があるため、NOW()、TODAY()、RAND()、RANDBETWEEN()などの関数を使用すると戻ります。他の関数のスプレッドシート関数にネストされていたり、参照を介して間接的に含まれていても、エラーが発生します。

Google Apps Scriptsには、シンプルなイベントとインストール可能なイベントの2種類のイベントがあります。詳細については、https://developers.google.com/apps-script/guides/triggers/を参照してください。

次のコードは、ユーザーがによって生成された乱数でスプレッドシートを編集するたびに、指定された単一セル参照を更新しますMath.random()

var reference = 'A1';

function onEdit(e){
  SpreadsheetApp
    .getActiveSheet()
    .getRange(参照)
    .setValue(Math.random());
}

参考文献


2

注:この回答は古いGoogleスプレッドシートでのみ有効でした。現在、などの非決定的関数NOW()、カスタム関数の引数として使用できません。エラーメッセージの結果は、「この機能はしてセルを参照するために許可されていないように、DOをしようとNOW()RAND()あるいはRANDBETWEEN()


Google Apps Scriptの関数は確定的であると想定されています。カスタム関数にはパラメーターがないため、毎回同じ結果を返します。問題2573を
参照:Math.random()がカスタムスプレッドシートの数式として再計算されない

毎回新しい乱数を生成するには、現在のタイムスタンプをパラメーターとして渡すことが機能すると考えられます。

 =f(now())

ただし、この関数は戻らないようです。これは、NOW()ミリ秒ごとに戻り値が変化し、計算に1ミリ秒以上かかるためだと思います。

したがって、頻繁に更新する必要のないものについては、次のように解決する必要があります。

=f(day(now()))

これにより、毎月新しいランダムな値が返されます。

この数式を複数のセルで使用すると、すべてのセルに同じランダム値が返されることに注意してください。これを回避するには、現在のセル座標をパラメーターとして渡すこともできます。

=f(day(now()), 2, 4)

スプレッドシートの例を設定しまし。自由に見てください。


代わりに新しいパラメータをintroductingの、あなたがかもしれない運で設定を変更しようとしている必要があり、ファイル→再計算→スプレッドシートの設定オンに変更し、毎分。少なくともこれは動作するはずです。ドキュメントをRAND()参照してください。現在、これによりエラーメッセージが表示されるため、これが機能するかどうかを確認できません。


2

乱数アドオンの生成は、Googleスプレッドシートで乱数を生成するのに役立ちます

ここに画像の説明を入力してください

詳細はこちら

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.