SpreadsheetでChatGPTを使い作業の効率化(GAS)
こんにちは、DSCLの小橋です。
生成AIがどんどん進化し、LLMがすごいなぁと日々感じてます。
僕もアイデア出しや、文章の校正、翻訳なんかはすごく便利で、良く使っています。
今回はそんなLLM(ChatGPT 4o)を、スプレッドシートで使うGASを作ったので、ご紹介します。良かったら使ってみてください!
※Geminiも試していたんですが、 2024-08 現在だと、1分あたりのリクエスト数が少なく、すぐ回数制限にひっかかってしまうため、いったん保留としました
作ったもの
SpreadsheetにGAS(Google Apps Script)と呼ばれる仕組みを使い、ChatGPTを呼び出せるようにしています。
もともと、 =GPT(B2)みたいな便利に使えるサンプルがあって、めちゃくちゃ便利使ってました。素敵なスクリプトです↓
参考:https://qiita.com/suzuki_sh/items/e44c2526d63fe9fa89ab)
使っていくうちに、キャッシュの問題でデータを保持していく必要がでてきました。そこで、自分の使い方にあわせカスタマイズを進め、「メニューからGPTを実行する形式」に変更しました。
使い方
このGASを入れると、選択したセルをInputとして、「ChatGPTを実行」メニューからアウトプットを出力できます。
また、標準では10セルまで複数指定ができて、いろんなバリエーションをInputにおいて試すなどできます。
出力先は、「選択したセルの右」「下」「同じセル」から選択できます。
共同編集者も、権限のアラート出るけど、許可すれば使えるっぽいです。
導入方法
1、下記コードを、GASにコピペして追加
2、OpenAIのAPI Keyを取得(いろいろなサイトに記載あり省略)
3、取得したAPI KeyをGASのスクリプトプロパティに OPENAI_API_KEY として設定
4、保存して実行(メニュー出すのためにSpreadSheetを1回リロード)
という手順で試せます。
1、下記コードを、GASにコピペして追加
function onOpen() {
var ui = SpreadsheetApp.getUi();
ui.createMenu('ChatGPTを実行')
.addItem('右にアウトプット', 'processSelectedCellsRight')
.addItem('下にアウトプット', 'processSelectedCellsBelow')
.addItem('同じセルにアウトプット', 'processSelectedCellsSame')
.addToUi();
}
function processSelectedCellsRight() {
processSelectedCells('right');
}
function processSelectedCellsBelow() {
processSelectedCells('below');
}
function processSelectedCellsSame() {
processSelectedCells('same');
}
function processSelectedCells(direction) {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var range = sheet.getActiveRange();
var numRows = range.getNumRows();
var numCols = range.getNumColumns();
var maxCells = 10;
// セルの総数を計算
var numCells = numRows * numCols;
if (numCells > maxCells) {
SpreadsheetApp.getUi().alert('選択範囲が10セルを超えています。最大10セルまで選択してください。');
return;
}
for (var i = 0; i < numRows; i++) {
for (var j = 0; j < numCols; j++) {
var cell = range.getCell(i + 1, j + 1); // Get the current cell
var cellValue = cell.getValue();
var outputCell;
if (direction === 'right') {
outputCell = cell.offset(0, 1); // 右隣のセル
} else if (direction === 'below') {
outputCell = cell.offset(1, 0); // 下隣のセル
} else if (direction === 'same') {
outputCell = cell; // 同じセル
}
if (cellValue === null || cellValue === undefined || cellValue.trim() === '') {
continue; // 空白セルはスキップ
}
var gptResult = GPT(cellValue);
outputCell.setValue(gptResult); // 出力セルに上書きで値を設定
}
}
}
/**
* GPTを呼び出し、処理する関数
*
* @param {string} input GPTへの入力文字列
* @param {string} [model] モデル名。デフォルトは"gpt-4o-2024-08-06"
* @return {string} GPTで生成した結果
*/
function GPT(input, model) {
var apiKey = PropertiesService.getScriptProperties().getProperty('OPENAI_API_KEY');
var defaultModel = 'gpt-4o-2024-08-06';
if (model === void 0) {
model = defaultModel;
}
var URL = "https://api.openai.com/v1/chat/completions";
var headers = {
"Content-Type": "application/json",
"Authorization": "Bearer " + apiKey
};
var body = {
model: model,
messages: [{ role: "user", content: input }]
};
var response = UrlFetchApp.fetch(URL, {
method: "post",
headers: headers,
payload: JSON.stringify(body)
});
var result = JSON.parse(response.getContentText()).choices[0].message.content;
return result;
}
拡張機能→ Apps Scriptを選択してコードをコピペ(ファイル名はなんでも良いと思われる)
GASのプロジェクト設定から、スクリプトプロパティを編集・追加
これで保存して、SpreadSheetをリロードして以上です!
途中、権限を求められるウィンドウが出るかもしれないので、許可してください。
Gptモデルは今は、gpt-4o-2024-08-06 を適応してますが、69行目の文字列を置き換えることで変更できます。
注意点
僕は本業がデザイナーで、エンジニアではないため、GASはChatGPTに相談して作ったものです。ご使用は自己責任で。改善案あれば、ぜひ教えてください!
以上、スプレッドシートでChatGPTを使うときの参考になれば幸いです。アイデア出しや翻訳など、スプレッドシートから直接GPTを呼び出せるの、結構便利ですよ。ちょっとプロンプト変えて、バリエーションを出したいときなんかには、特に便利です。よければ試してみてください!
この記事が気に入ったらサポートをしてみませんか?