スプレッドシートでランダムな数字を出す方法|関数とGASの使い分け
スプレッドシートではランダムな数字を簡単に生成することができ、抽選やデータシミュレーション、テストデータ作成などで役立ちます。
関数を使えば手軽にランダムな数字を出せますし、Google Apps Script (GAS) を活用することで、重複のない値の生成など柔軟な設定が可能です。
本記事では、スプレッドシートでランダムな数字を出す方法を、関数とGoogle Apps Script (GAS)の両方でご紹介します。
用途に応じた方法を取り入れて、スプレッドシートでの作業をより効率化しましょう。
完成イメージ
- 関数の場合:シート内のどこかのセルが編集されるたびに、ランダムな数字が自動的に更新
- GASの場合:スクリプトを実行したタイミングでのみ、ランダムな数字が生成
ランダムな数字を出す方法
関数の場合
小数のランダム値を生成
=RAND()
=RAND()
をセルに入力すると、0以上1未満の値が出力されます。
ランダムな整数を生成(指定の範囲内)
=RANDBETWEEN(1, 100)
指定した範囲内の整数を生成します。
=RANDBETWEEN(1, 100)
(1, 100)で、1から100までの整数が生成されます。
メリット | デメリット |
---|---|
簡単に実行可能 リアルタイムに更新(シート編集時) | 値が固定されない 関数を多用すると、動作が遅くなる 重複を排除しにくい |
関数は手軽さが最大の魅力ですが、特定の用途(値の固定や大量のデータ処理)には不向きです。
関数で得られた値は、シート編集時に変化するため、固定した値が必要な場合はコピー&ペーストして値として保存することをお勧めします。
また、関数で重複を排除することはUNIQUE
関数を使ってできますが、元のランダム数値が入力されているセルとは別のセルに入力する必要があります。
GASを使う場合
スクリプト例(ランダムな整数)
function generateRandomNumbers() {
const sheetName = "ランダム数字"; // 対象のシート名を指定
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (!sheet) {
throw new Error(`シート名 "${sheetName}" が見つかりません`);
}
const range = sheet.getRange(2, 1, 10, 1); // A列2行目から10行分
const randomValues = [];
for (let i = 0; i < 10; i++) {
randomValues.push([Math.floor(Math.random() * 100) + 1]); // 整数を生成
}
range.setValues(randomValues);
}
スクリプトの説明
- シート名の指定
-
const sheetName = "ランダム数字";
- ランダムな数字を生成して出力する対象シートの名前を指定しています。
- 実際のシート名に応じてご変更ください。
- 対象シートの取得
-
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); if (!sheet) { throw new Error(`シート名 "${sheetName}" が見つかりません`); }
- スプレッドシートから指定した名前のシートを取得します。
- シートが見つからない場合、エラーをスローしてスクリプトを停止します。
- 出力範囲の指定
-
const range = sheet.getRange(2, 1, 10, 1);
- ランダムな数字を出力する範囲を指定しています。
- 「A列2行目から10行分」を対象としています。
- ランダムな整数の生成
-
const randomValues = []; for (let i = 0; i < 10; i++) { randomValues.push([Math.floor(Math.random() * 100) + 1]); }
Math.random()
を使って 1 以上 100 以下のランダムな整数を生成します。- 生成された整数は、2次元配列の形式で
randomValues
配列に追加されます。
- 生成された値の出力
-
range.setValues(randomValues);
配列
randomValues
に格納されたランダムな整数を、指定した範囲(2行目以降のA列10行分)に出力します。
スクリプトの使用方法
Googleスプレッドシートを開き、メニューの「拡張機能」から「Apps Script」をクリックしてGASエディタを開きます。
function myFunction(){
}
が最初から入っているため、消去して以下のスクリプトを貼り付けます。
function generateRandomNumbers() {
const sheetName = "ランダム数字"; // 対象のシート名を指定
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (!sheet) {
throw new Error(`シート名 "${sheetName}" が見つかりません`);
}
const range = sheet.getRange(2, 1, 10, 1); // A列2行目から10行分
const randomValues = [];
for (let i = 0; i < 10; i++) {
randomValues.push([Math.floor(Math.random() * 100) + 1]); // 整数を生成
}
range.setValues(randomValues);
}
スクリプトを書いたら、名前を付けて保存します。
(例:「緯度経度(DMS形式)」)
スクリプトを実行するとランダムな数字(整数)が生成されます。
初めてそのスクリプトを実行する場合は権限の確認が必要です。
そのため、『権限を確認』を押します。
許可の詳細手順
「詳細」をクリックします。
「無題のプロジェクト(安全ではないページ)に移動」をクリックします。
「許可」をクリックします。
メリット | デメリット |
---|---|
値を固定できる 重複を排除しやすい 大量データ処理に強い | スクリプト作成に手間がかかる |
スクリプトはカスタマイズ性や大量データ処理の点で優れていますが、設定の手間がかかる点を考慮する必要があります。
重複しないランダム数値を生成(GAS)
GASを使った方法では、重複しないようランダム数値を生成することも比較的容易にできます。
重複のないランダムな数字を生成(整数)
function generateUniqueRandomNumbers() {
const sheetName = "ランダム数字"; // 対象のシート名を指定
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName);
if (!sheet) {
throw new Error(`シート名 "${sheetName}" が見つかりません`);
}
const range = sheet.getRange(2, 1, 10, 1); // A列2行目から10行分
const min = 1; // 最小値
const max = 100; // 最大値
const uniqueNumbers = new Set();
while (uniqueNumbers.size < 10) {
const randomInt = Math.floor(Math.random() * (max - min + 1)) + min;
uniqueNumbers.add(randomInt);
}
const output = Array.from(uniqueNumbers).map(num => [num]);
range.setValues(output);
}
スクリプトの説明
- シート名の指定
-
const sheetName = "ランダム数字"; // 対象のシート名を指定
- ランダムな数字を生成して出力する対象シートの名前を指定しています。
- 実際のシート名に応じてご変更ください。
- 対象シートの取得
-
const sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName(sheetName); if (!sheet) { throw new Error(`シート名 "${sheetName}" が見つかりません`); }
- 出力範囲の指定
-
const range = sheet.getRange(2, 1, 10, 1); // A列2行目から10行分
- ランダムな数字を出力する範囲を指定しています。
sheet.getRange(開始行, 開始列, 行数, 列数)
- 開始行 (
2
)は範囲の先頭となる行番号を指定します。 - 開始列 (
1
)は範囲の先頭となる列番号を指定します。 - 行数 (
10
)は指定した範囲が占める行数を表します。 - 列数 (
1
)は指定した範囲が占める列数を表します。 - この場合は「A列2行目から10行分」を対象としています。
- 最小値と最大値の指定
-
const min = 1; // 最小値 const max = 100; // 最大値
- ランダムに生成する数値の範囲を設定します。
- この場合、1以上100以下の整数が生成されます。
- 重複のないランダムな整数を生成
-
const uniqueNumbers = new Set(); while (uniqueNumbers.size < 10) { const randomInt = Math.floor(Math.random() * (max - min + 1)) + min; uniqueNumbers.add(randomInt); }
Set
オブジェクトを使用して、重複のないランダムな整数を生成します。- ランダムな整数が既にセットに存在していれば無視され、新しい整数が生成されます。
- 指定した数(この場合10個)に達するまで繰り返します。
- 配列の形式を整え、スプレッドシートに出力
-
const output = Array.from(uniqueNumbers).map(num => [num]); range.setValues(output);
Set
から配列に変換し、スプレッドシートに出力できる形式(2次元配列)に変換します。- 指定した範囲にランダムな値を設定します。
このスクリプトは、抽選やデータシミュレーションのような場面で特に役立ちます。
必要に応じて、数値範囲や出力範囲を変更することで、幅広い用途に対応可能です。
まとめ
スプレッドシートでランダムな数字を出す方法は、関数で簡単に実行できますが、GASを使うことでより高度なカスタマイズが可能になります。
用途に合わせて、これらの方法をお使い分けください。
弊社では、Google Apps Script(GAS)を活用した業務効率化のサポートを提供しております。
GASのカスタマイズやエラー対応にお困りの際は、ぜひお気軽にご相談ください。
また、ITツールの導入支援やIT導入補助金の申請サポートも行っております。
貴方の業務改善を全力でサポートいたします。
コメント