【生成AI×GAS】GASでスプレッドシートを操作する〔複数セルのコピー〕
オレンジピーチのトシです。
今回も、GAS(Google Apps Script)でスプレッドシートを操作する方法を紹介したいと思います。
生成AIを用いて、GASを書いて実行する方法で行います。
前々回の記事で、スプレッドシートの中の1つのセルをコピペする方法を紹介しました。今回は、それを少し発展させて、複数セルをコピペしたいと思います。
完成イメージ:やりたいこと
今回、実施したいことは、下の図のようなスプレッドシートの「A2」から「D3」のセルに記載されている内容を、「A8」から「D9」セルにコピーする。
前の記事で紹介した「単一セル」をコピペする方法から、少しだけ複雑になっていますが、やってみましょう。
生成AIを使ってGASを作り、実行する。
今回も、生成AIとして、Microsoft Bing Copilot を利用しました。
ここからは、今回実施した内容を説明します。
生成AIは、同じ質問をしても、異なる回答が返ってくることが多いので、もしこの記事をご覧になって、同じように質問しても、違う回答となるかもしれません。しかし、簡単なプログラムなので、概ね動くものにはなるかとおもいます。
生成AIに、次の指示を出しました。
前の記事を見て頂いた人の中には、「前とほとんど変わってないな」と気づかれた人もいると思います。
この点は、その通りで、生成AIに出す指示は、実施したい内容を丁寧に書いていくことを意識すれば、どのような書き方でも構いません。
このあたりの指示(プロンプト)の出し方は、どこかで別の記事にしたいと思っています。)
生成AIからの回答が表れる。
出てきた回答は次のようなものです。
生成AIは、同じ質問をしても、異なる回答が返ってくることが多いので、もしこの記事をご覧になって、同じように質問しても、違う回答となるかもしれません。しかし、簡単なプログラムなので、概ね動くものにはなるかとおもいます。
「GASを活用して、スプレッドシートの業務を効率化しましょう!」と書かれると、”頑張るぞ!”ってなります。(単純)
function cellCopy() {
// シート名「転記」を取得
let mySheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("転記");
// コピー対象のセル範囲を選択
let copyRange = mySheet.getRange("A2:D3");
// 貼り付け先のセル範囲を選択
let pasteRange = mySheet.getRange("A8:D9");
// セルの値をコピーして貼り付け
let valuesToCopy = copyRange.getValues();
pasteRange.setValues(valuesToCopy);
}
GASをコピペし、実行しました。
結果としては、見事に、意図した操作が行われています。
(はじめてのGASの実行に際しては、「権限の承認」などの操作が必要になります。そのあたりの操作は、下記の記事をご覧ください。)
生成AIにGASの解説をしてもらう。
生成AIに聞いてみる。
GASが動くことが分かったので、どのような操作が行われているかを、解説してもらいましょう。
今回もスクリプトが短いので、全文を生成AIに読ませて、説明してもらいます。
生成AIからの回答を読む。
スクリプトの内容を、項目分けして説明してくれています。
内容で分からないことがあれば、さらに質問を重ねると、より詳しい回答を返してくれます。
前の記事で作成したGASの内容との変化点。
作ったGASの内容については、ほとんど生成AIが説明してくれていますが、いくつか違いがあるので、補足説明したいと思います。
前の記事と両方を読んで頂くことで、理解の幅が広がればHappyです。
function copyValue() {
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('転記');
var value = sheet.getRange('C2').getValue();
sheet.getRange('C8').setValue(value);
}
いくつか違いがあるので、ポイントを解説します。
宣言文: let
前の記事では、変数の宣言文として「var」を使用しました。
今回は「let」が使われています。
GASでは変数の宣言文として、const、var、let の3つが用意されています。(それぞれの機能の違いはここでは割愛します)
生成AIが参考にした大量の文書からどれを取り出すかの話なので、スクリプト全体には影響はありません。
letの後に続く、変数名を宣言したのだなと捉えてください。変数: mySheet
前の記事では、sheet やvalue といった変数を指定しました。
変数の名前の付け方は自由につけることが出来ますので、多くの変数を定義するような、長いスクリプトになる際には分かりやすい名前を付けるのが良いです。
変数名のつけ方には、いくつかのマナーがあります。
ここでは代表的な2つを紹介します。
★ローワーキャメルケース
(単にキャメルケースと呼ばれることも多い)
→単語の区切りを大文字で表現します。最初の文字は小文字です。
例:pushStartButton
★スネークケース
→アンダースコア( _ )で、単語区切りを表現する。
例:push_start_button
(GASに触りはじめた直後は、それほど気にしなくて良いですが、会社やチームでルールを決めている場合もあります。)
生成AIが考えた変数名は、自分にはマッチしないといったことも発生します。変数名の効率的な変更の方法などもありますので、WEBで調べたり、生成AIに教えてもらったりすると良いです。(私も今後noteに発信していきたいと思います。)getValues( ) と setValues( ) :
前の記事では、「getValue( ) 」、「setValue( ) 」でした。
対象が複数になると、複数形となり、「getValues( )」「setValues( ) 」となります。
たった1文字、s の有無だけの違いですが、間違えるとGAS全体が正しく動きません。長いスクリプトを書いたり、コピペしたコードを用いる際に、間違いになることがありますので気に留めておきましょう。
まとめ
今回も、簡単なプログラムではありますが、生成AIに考えてもらったGASを貼り付けて実行するだけで、目的とするスプレッドシート操作を行うことが出来ました。
会社や組織の中で、「同じ手順で転記する」といった定型の業務は、至る所にあるのではないかと思います。
企業の業務効率化やDXを進めていくには、定型業務の棚卸しが効果出来ですが、実は「定型業務」と認識して行っている人は、少数派です。
少しでも多くの人が、「この作業って、定型作業では?」「GAS等で自動が出来ないかな?」と疑問に思って頂くことが、最初の一歩になります。
この記事を、読んで頂いた人の中から「もしかして?この作業・・・」とヒラメキが生まれる人がいたらHappyです!
最後まで読んで頂き、ありがとうございました。