グーグルスプレッドシートのリストから5つをランダムでピックアップするプログラムをChatGPTに書いてもらったのでシェア。
そもそもこどもに読む絵本を5冊、ランダムにピックアップしてほしかったので簡単に作れないか?と思いました。いやスプシ自体でランダム関数で並び替えるとかでもいいんですけどね。
ChatGPTって何?
ChatGPTはAIチャットボットサービスで、いろんなコードも出力できるサービスです。今回はGPT-4で出力してみます。3.5では試してないのですが、エクセルでも同様のものが出力できるはず。
プロンプト開始


そうしてChatGPTは
Google Apps Scriptを使って、Google スプレッドシート内のリストからランダムに5つのデータを選ぶプログラムを書きます。以下の手順に従ってください。
- Google スプレッドシートを開きます。
- 上部のメニューから「拡張機能」>「Apps Script」をクリックして、Google Apps Scriptエディタを開きます。
- 新しいスクリプトを作成し、以下のコードをコピーしてエディタに貼り付けます:
と言ってAppsScriptを出力しました。
出力されたAppsScript
このあと複数のプロンプトで別シートに出力するやり方をカスタマイズしていますので下記は最終形です。
function pickRandomItems() {
// スプレッドシートとシートを選択
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
// リストの範囲を選択 (例: A2:B101)
const range = sheet.getRange('A2:B101');
// 範囲内のデータを取得
const data = range.getValues();
// 配列をシャッフルする関数
function shuffle(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]];
}
return array;
}
// データをシャッフル
const shuffledData = shuffle(data);
// シャッフルされたデータから5つを取得
const randomItems = shuffledData.slice(0, 5);
// 結果を新しいシートに出力
const timestamp = new Date().toLocaleString().replace(/[\/\:\s]/g, '-'); // タイムスタンプを取得して、フォーマットを調整
const outputSheetName = 'Random Selection ' + timestamp;
const outputSheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet(outputSheetName);
outputSheet.getRange(1, 1, randomItems.length, randomItems[0].length).setValues(randomItems);
}
// メニューにスクリプトを追加
function onOpen() {
const ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('Pick 5 Random Items', 'pickRandomItems')
.addToUi();
}
- 保存して、Google スプレッドシートに戻ります。
- スプレッドシートを更新すると、新しい「Custom Menu」が表示されます。
- 「Custom Menu」>「Pick 5 Random Items」をクリックして、リストからランダムに5つのデータを選び、新しいシートに表示します。
上記のやり方でAppsScriptを設定してもとのシートのA1からA100まで書籍タイトルを入れます。
そして「Pick 5 Random Items」をクリックすると別シートに5つのタイトルが出力されます。
B1からB100にその作者名を入力すると合わせてピックアップする際にもっていってくれます。