見出し画像

GPTにスプレッドシートを教えてもらうコツ

スプレッドシートで関数を使ってこんなことをやりたい..けど難易度が高そうで止まってしまっている..聞ける人もいないし..なんてことありませんか?
ChatGPTを活用するとものすごい速さでそれが解決していきます。
今回は、GPTにスプレッドシートを教えてもらうコツを実際の流れを含めて共有します。

スプシで解決したいこと
メルマガのHTMLをスプレッドシートで編集しているのですが、メルマガによって必要な要素が分かれるので、ブロック単位の入力シートをたくさん作っておいて、必要なシートだけ読み込んでくればいい方式にしたいと思いました。
インプットするシートのセル範囲を指定して、そのセルの内容をまるっと1行にして、アウトプットするシートの1セル内に読み込めれば、読込のシートを改修するだけで、簡単にコントロールできて良さそうなんですが..

上記の手法を、ぱっとネットで調べるとCONCATとかFLATTENとか関数出てくるんですけど、やりたいことと違うんですよね...検索むずかしい。。
ということで以下、実際にスプシもjavascript弱勢の自分が、GPTに教えてもらった流れです。

GPTに教えてもらうコツ

やりたいことを明確にしておく

まず、やりたいことを明確にしておきます。

🧒🏻 セル範囲を指定して、そのセルの内容をまるっと1行に変換して、アウトプットするシートの1セル内に読み込みたい

シート名やセル範囲など、実際自分が使う条件や名称を入れて聞く

引数の設定など、仮で値を入れるとどこを変更したらいいのかわかりづらくなります。実際に使うスプレッドシートに内容を合わせるとそのまま使えるのでおすすめです。

🧒🏻 スプレッドシートで、inputというシートのA1:C16までのセル内のデータを1行にして、outputというシートのA1に入れたいです。どのように式を書けばいいですか?

🤖 Googleスプレッドシートの場合、次のような式をoutputシートのA1セルに入力してください
=ARRAYFORMULA(FLATTEN(TRANSPOSE(FILTER(input!A1:C16, LEN(input!A1:C16)))))

関数組み合わせて利用すればいけそうなのかな?
早速やってみると..


スプレッドシート結果: 💻 「error」
FILTERの範囲は単一行か単一列にしてください


エラー内容をGPTに共有して、どうすれば良いか聞く

エラーが出てしまった場合は、エラー内容をGPTに把握してもらうため、フィードバックして更なる解決方法を提示してもらいましょう。

🧒🏻 FILTERの範囲は単一行か単一列にしてくださいと言われました。他に方法はありますか?

🤖 すみません、その方法は失敗してしまいましたね。別の方法として、以下のカスタム関数を使ってデータを1行に変換することができます。
1. Googleスプレッドシートを開いて、"拡張機能"メニューから"Apps Script"を選択します。
2. 新しいプロジェクトが開いたら、コードエディタに以下の関数をコピーして貼り付けます:

javascript
function flattenRange(rangeData) {
var output = [];
for (var i = 0; i < rangeData.length; i++) {
for (var j = 0; j < rangeData[i].length; j++) {
output.push(rangeData[i][j]);
}
}
return [output];
}
3. 上部のメニューで"ファイル" > "保存"を選択して、プロジェクトに名前を付けて保存します。
4. スプレッドシートに戻り、outputシートのA1セルに次の式を入力します:
=flattenRange(input!A1:C16)
これで、inputシートのA1:C16までのセルのデータがoutputシートのA1行に入ります。

素直に失敗を認めるGPT氏。保存ボタン位置などは日々変わるので、現状のスプシに追いついてない感はありますが、もちろん他のノウハウ記事もそれは同じなので、十分です。
ということでやってみますが..


スプレッドシート結果結果: 🧒🏻 「….微妙」
1行にはなったものの、1セルに収まらず、セルが別々になってしまいました。


GPTに起きた状況をフィードバックして解決方法を聞く

起こってしまったことを端的に伝えて、解決方法を聞きます。

🧒🏻 1行にはなりましたが、セルが別々になってしまいました。1セルの中に全てのデータを収めたいのですが、どうすれば良いでしょうか。

🤖 すみません、説明が不足していました。Google Apps Scriptを使って、1セルに全てのデータを収める方法を以下に示します。
1. Googleスプレッドシートを開いて、"拡張機能"メニューから"Apps Script"を選択します(既に開いている場合は、そのまま続行してください)。
2. コードエディタに以下の関数をコピーして貼り付けます(以前書いた`flattenRange`関数の代わりに):

javascript
function flattenRangeInOneCell(rangeData) {
var output = '';
for (var i = 0; i < rangeData.length; i++) {
for (var j = 0; j < rangeData[i].length; j++) {
output += rangeData[i][j];
if (j < rangeData[i].length - 1) {
output += '';
}
} if (i < rangeData.length - 1) {
output += '';
}
}
return output;
}
3. 上部のメニューで"ファイル" > "保存"を選択して、変更内容を保存します。
4. スプレッドシートに戻り、outputシートのA1セルに次の式を入力します:

=flattenRangeInOneCell(input!A1:C16)
これで、inputシートのA1:C16までのセルのデータが、カンマ区切りの1つの文字列として、outputシートのA1セルに表示されます。データの区切り文字を変更したい場合は、`flattenRangeInOneCell`関数のコードを編集してください。

「既に開いている場合は、そのまま続行してください」
「以前書いた`flattenRange`関数の代わりに」
フォローがいき届いている…すごいですね。
ユーザーが迷いそうなところを先回りして指摘していてすごいです。

できました!

そして無事、こちらの手法でセル範囲を指定して、1セルに読み込むことができました!

 ▼ Apps Script

function flattenRangeInOneCell(rangeData) {
  var output = '';
  for (var i = 0; i < rangeData.length; i++) {
    for (var j = 0; j < rangeData[i].length; j++) {
      output += rangeData[i][j];
      if (j < rangeData[i].length - 1) {
        output;
      }
    }
    if (i < rangeData.length - 1) {
      output;
    }
  }
  return output;
}

アウトプット先のセル

=flattenRangeInOneCell(input!A1:C16)

というわけでGPTにスプレッドシートの先生になってもらったわけですが、難なく解決しました!(スクリプトで微妙なポイントはあるかもしれませんが…稼働は問題なかったです)
今までだったら、詳しい人に聞いたり、それでもわからなかったりで、ネットのノウハウを時間をかけて漁って、ようやく辿り着いていただろう道のり..
それがわずか数分で解決という、かなりの時短です。

みなさんもスプレッドシートでお悩みの際は、ぜひGPTを活用してみてください!



この記事が参加している募集

AIとやってみた

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