見出し画像

【生成AI×GAS】違うスプレッドシートファイルに値をコピーする〔スプレッドシートID〕

オレンジピーチのトシです。
 前回は、シートを越えて、値をコピーする方法を紹介しました。
しかし、前回紹介したものは、シートは違えど、スプレッドシートのファイルとしては同じものでした。
 今回は、別ファイルのスプレッドシートにコピーする方法を、生成AIを利用して作っていきます。
 生成AIを利用して、GAS(Google Apps Script)を作成し、スプレッドシートを操作する方法を紹介しています。

完成イメージ:やりたいこと

 今回、実施したいことは、下の図のようなに、「スプレッドシート①の『転記元』というシート」から、「スプレッドシート②の『転記先』というシート」に値をコピーする。
 コピーするのは、「転記元のA2~D2」セルの値を、「転記先のA8~D8」セルにコピーすることとする。
(前回までの note と比べると、指示が複雑になって来ています。
 なるべく分かりやすい説明をしたいと思いますので、ゆっくり読み進めてください。)

別のファイルに値をコピーする

生成AIを使ってGASを作り、実行する。

今回も、生成AIとして、Microsoft Bing Copilot を利用しました。

生成AIは、同じ質問をしても、異なる回答が返ってくることが多いので、もしこの記事をご覧になって、同じように質問しても、違う回答となるかもしれません。しかし、簡単なプログラムなので、概ね動くものにはなるかとおもいます。
(生成AIの安全性については、様々な議論が行われているため、会社で使う場合は、自社の利用規定などを確認してから使用してください。
 また、個人情報などは入力しないか、生成AIごとの推奨に基づいた形での利用をお薦めします。)

生成AIに、次の指示を出しました。

 今回は、生成AI(Bing Copilot)に次のような指示を出しました。
過去の記事で題材とした内容と比べると、少し複雑になって来ています。
 後ほど、指示(プロンプト)についても解説したいと思います。

スプレッドシートのシート名「転記元」のA1セルからD3セルに値が入力されています。 この中のA2セル~D2セルにある値を、 違うIDのスプレッドシートの、シート名「転記先」のA8セル~D8セルにコピーしたいです。 この操作が出来るGASを作成してください。

Bing Copilot への指示

生成AIからの回答が届く。

 生成された回答がこちらです。
「スプレッドシートファイルのIDの取得」が今回のポイントです。

コードの部分がこちらです。
(今回は、GASのエディタにそのままコピペしてもエラーになります。
 必要な修正点を、このあと説明します。)

function transferToAnotherFile() {
    const sourceFileId = '転記元ファイルのID'; // 転記元ファイルのIDを入力
    const sourceSheetName = '転記元'; // 転記元シート名を入力
    const targetFileId = '転記先ファイルのID'; // 転記先ファイルのIDを入力
    const targetSheetName = '転記先'; // 転記先シート名を入力

    const sourceSpreadsheet = SpreadsheetApp.openById(sourceFileId);
    const sourceSheet = sourceSpreadsheet.getSheetByName(sourceSheetName);
    const targetSpreadsheet = SpreadsheetApp.openById(targetFileId);
    const targetSheet = targetSpreadsheet.getSheetByName(targetSheetName);

    const sourceRange = sourceSheet.getRange('A2:D2'); // 転記元の範囲
    const targetRange = targetSheet.getRange('A8:D8'); // 転記先の範囲

    const valuesToTransfer = sourceRange.getValues();
    targetRange.setValues(valuesToTransfer);
}

そのほかの内容は、これまでと同じようなものですね。

GASの内容を解説

スプレッドシートのIDとは

 前述のように、今回のポイントは「スプレッドシートファイルのIDの取得」です。
スプレッドシートはファイルを一意に表す、「スプレッドシートID」というものを持っています。スプレッドシートのアドレス(URL)の中に、IDが含まれています。

スプレッドシート①の「スプレッドシートID」

 URLの中で、「spreadsheets/d/ の後ろ、/editの前まで」の英数字記号が、スプレッドシートIDになります。
 「スプレッドシート①」、「スプレッドシート②」のそれぞれのスプレッドシートIDを、GASに組み込むことで、対象のファイルを特定します。
詳しく知りたい人は、公式サイトもご覧ください。

その他の部分のコード解説

  • 宣言文: const
     今回のコードでは、定数の宣言文である「const」が使われています。
    これまでの記事で紹介した「var」「let」と同じように変数を宣言するために使用されます。
    特に、const は、一度宣言すると、値を更新することが出来ないため、「定数」と呼ばれます。
     短いコードの場合は、さほど気になりませんが、長いコードを書くときには、誤って変数を上書きしてしまうといったミスが発生します。
    そのようなミスを防ぐためにも、プログラムの中で変更しない変数は、constを用いて定数とすると良いです。

   const sourceFileId = '転記元ファイルのID'; // 転記元ファイルのIDを入力

   const sourceSheetName = '転記元'; // 転記元シート名を入力

   const targetFileId = '転記先ファイルのID'; // 転記先ファイルのIDを入力

   const targetSheetName = '転記先'; // 転記先シート名を入力

  • openById() :スプレッドシートをIDで開く
    スプレッドシートをIDで開くためのメソッドです。
    (英単語の並びで、なんとなくイメージつきますね) 

const sourceSpreadsheet = SpreadsheetApp.openById(sourceFileId);

  • 変更する可能性がある "文字列" を前もって定数に入れる。
     今回のコードでは、最初の4行で、ファイル名2つと、シート名2つを定数として宣言しています。
     このように書くことで、「ファイルID」や「シート名」が変わったときに、この箇所だけを修正することで、対応することが出来ます。
    (スクリプトを他に使いまわす際にも、使い勝手が良いので、このようなコツも少しづづ覚えていくと、コードを書く幅が広がると思います。)

   const sourceFileId = '転記元ファイルのID'; // 転記元ファイルのIDを入力

   const sourceSheetName = '転記元'; // 転記元シート名を入力

   const targetFileId = '転記先ファイルのID'; // 転記先ファイルのIDを入力

   const targetSheetName = '転記先'; // 転記先シート名を入力

GASを実行してみる。

 実際に、GASを動かしてみます。はじめてGASを実行する際には、「権限の承認」などが問われます。
より詳細な内容は、過去の記事で紹介していますので、はじめての人はこちらも読んで見てください。

 GASを実行すると、狙い通り、ファイル「スプレッドシート②」のシート「転記先」のA8セル以降に、値をコピーすることが出来ました。

スプレッドシートIDの部分を修正してGASを実行する。

まとめ

 今回は、別ファイルのスプレッドシートにコピーする方法を、生成AIを利用して作成しました。
 ここで、改めて、生成AIに出した指示文を見て頂きたいです。
この指示(プロンプト)の中には、今回のGASコードを書くのに必要な要素を盛り込んでいます。

スプレッドシートのシート名「転記元」のA1セルからD3セルに値が入力されています。 この中のA2セル~D2セルにある値を、 違うIDのスプレッドシートの、シート名「転記先」のA8セル~D8セルにコピーしたいです。 この操作が出来るGASを作成してください。

Bing Copilot への指示

 必要な要素が足りないと、生成AIが勝手に不足を補うため、意図しないコードになる場合もあります。
 生成AIを上手に活用するためにも、GASの仕組みについて興味を持って頂けるとHappyです!

最後まで読んで頂き、ありがとうございます。

この記事が少しでもお役に立てたのなら、サポートいただけると嬉しいです。頂いたご支援は、今後の活動費やコンテンツの質向上に使わせていただきます。