Google Driveでファイルの保管先を移動をしたいとき、ファイルを一つずつ手作業で移動させるのはメンドウです。
なぜメンドウなのかというと、以下のような理由があります。
・マウスでファイルを移動できないことがある
・通常ファイルはマイドライブに自動保存される
以上のように、エクセルやワードのようなファイル移動ができないのです。
そこでGASを使い、ボタンクリックで所定フォルダにファイルを移動する仕組みを紹介します。
・プログラミングスキルなしで仕組みを作る方法
・GASプログラムの解説
画像や動画を使いながら解説していますので、ご自身のPCで試しながらご覧ください。
目次
Googleドライブ上の複数ファイルの保存先を移動する手順を解説
手順2|移動したいファイルURLをセルA4以下にコピペする
手順3|スプレッドシートのボタンをクリックする
以下で一つずつ解説していきます。
手順1|移動先のフォルダURLをセルB1にコピペする
セルB1に移動先のフォルダURL(Googleドライブ)をそのまま貼り付けます。
手順2|移動したいファイルURLをセルA4以下にコピペする
セルA4以下に移動したいファイルURLをそのまま貼り付けます。
ファイルURLは、以下の手順で貼り付けます。
移動したいファイル数を以下のように貼り付ける。
手順3|スプレッドシートのボタンをクリックする
そうすると、以下のようにセルA4以下のファイルがセルB1のフォルダに移動します。
上記の操作でファイルをボタン一発で移動させることができます。
それでは以下で、この仕組みの作り方について解説していきます。
GASで指定したGoogleドライブにファイルを移動させる仕組みをゼロから作ってみる|ステップごとに解説
ステップ2|スプレッドシートに必要情報を入力する
ステップ3|GASプログラムをコピペする
ステップ4|スプレッドシートにボタンを設置する
ステップ5|ステップ4のボタンクリックでステップ3のプログラムが動くようにする
ステップ6|動作確認をする
それでは、ゼロから作っていけるように作り方を順を追って説明していきます。
ステップ1|スプレッドシートを準備する
まずは、空のスプレッドシートを準備します。
ここでは新しいスプレッドシートを作っていますが、既存のスプレッドシートでも問題ありません。
この記事のプログラムを活用する場合、「シート1」の名前を変更しないこと
注意としては、もしこの記事のプログラムをそのまま活用する場合、シート名は「シート1」のままにしておく必要があります。
「シート1」の名称を変更するとエラーが発生します。
ステップ2|スプレッドシートに必要情報を入力する
以下の通り、スプレッドシートに必要情報を入力していきます。
2. セルA1とセルB1に情報を記入する
3. セルA3以下に情報を記入する
以下で詳しく解説していきます。
「無題のスプレッドシート」のままだと分かりづらいので、スプレッドシート名を変更
スプレッドシートの名称は、好みの問題です。
変更不要と思う場合はスキップして問題ありません。
また既存のスプレッドシートを使う場合も、スキップして構いません。
セルB1にフォルダURLをコピペしてもらうための枠を作成
この記載はチームメンバーが、この仕組みを使用する際に困らないようにするためのものです。
この目的が達成されるのであれば、この記載にこだわる必要はありません。
セルA4以下にファイルURLをコピペしてもらうためのヘッダー情報と枠を作成
これはチームメンバーが、ファイルURLをセルA4以下にコピペしてもらうための記載です。
この目的が達成されるのであれば、この記載にこだわる必要はありません。
ステップ3|GASプログラムをコピペする
2. スクリプトエディタをクリックする
3. GASプログラムをデフォルトの記載を削除する
4. この記事で紹介しているGASプログラムをコピペする
5. ファイルをクリックする
6. 保存をクリックする
以下で一つずつ解説していきます。
以下の画像は、別の記事を転用しているものがあります。
操作の内容に違いがないため、画像を修正せずにそのまま使用しています。
ご了承ください。
そうすると、以下のスクリプトエディタを出現します。
ちなみに1と2の作業は以下のショートカットキーでも開くことが可能です。
1. ツールをクリックする|[Alt] + [T]
2. スクリプトエディタをクリックする|[E]
以下のリンク先のGASプログラムをコピーします。(リンク先は同じページ下部です)
まず、以下のスクリプトエディタを選択して、もともと記載されているプログラムを削除します。
そして、コピーしたGASプログラムソースを貼り付けます。
ここまで作業が進むと以下のようになっているはずです。
ここまで出来たら、以下のとおりファイルを保存します。
5と6の作業は、[Ctrl] + [S]のショートカットキーを使うことをオススメ
プログラミングだけでなく、パソコン仕事においてはショートカットキーを使う方が早いです。
ぜひショートカットキーでの作業をオススメします。
ちなみにプログラムエディタの背景色が黒にする方法や、正確な操作を知りたい人がいるかもしれません。
その場合は、以下の動画をご覧いただくことをオススメします。
上記の動画では、GASを使い始めるまでの操作手順を動画で解説しています。
もし動画よりテキストのほうが得意な人は、以下の記事を参考にしていただくと良いです。
ステップ4|スプレッドシートにボタンを設置する
2. 図形描画をクリックする
3. 図形マークをクリックする
4. 図形をクリックする
5. 四角マークをクリックする
6. マウスドラックで四角図形を作成する
7. 四角の図形の中に「フォルダ内の情報をリスト化」と記入する([Ctrl] + [E]で中央に寄せる)
8. 「保存して終了」をクリックする
以下で一つずつ解説していきます。
以下の画像は、別の記事を転用しているものがあります。
操作の内容に違いがないため、画像を修正せずにそのまま使用しています。
ご了承ください。
上記の操作を行って、スプレッドシートにボタンを設置します。
ステップ5|ステップ4のボタンクリックでステップ3のプログラムが動くようにする
2. 「スクリプトを割り当て」をクリックする
3. 「moveFile」と記入する(先ほどコピペしたGASプログラムの名称)
4. 「OK」ボタンをクリックする
上記の操作で、スプレッドシートのボタンをクリックすると、プログラムが起動するようにします。
ステップ6|動作確認をしてみる
それでは、複数フォルダを自動作成する仕組みができたので、動作確認をします。
以下の手順で進めていきます。
2. 保存先を移動したいファイルのURLをセルA4以下に貼り付ける
3. ボタンをクリックする
4. 結果を確認する
少し話がそれますが、以下で動作確認をするときに役立つテクニックを紹介しておきます。
役立つテクニック|ショートカットキー
Google DriveのURLをスプレッドシートに貼り付けるときは、以下のショートカットキーを使うと操作を早くできます。
– GoogleDriveのフォルダURLを選択|[Alt] + [D]
– GoogleDriveのフォルダURLをコピー|[Ctrl] + [C]
– スプレッドシートの切り替え|[Alt]を押しながら[Tab]
– スプレッドシートのセルB1(を選択し)へ貼り付け|[Ctrl] + [V]
それでは話を本題に戻し、動作確認の続きを説明します。
ボタンを押すあと、ファイルが目的フォルダに移動していることを確認します。
これで、セルB1に指定したGoogleドライブにファイルを移動させることができます。
なお、ファイル数に限度はありません。100行のファイルURLをセルA4以下にコピペすれば、100コのファイルを移動します。
よくある質問1|「承認が必要」と表示されたとき、どうする?
ボタンをクリックすると、上記のように「このドキュメントに添付されたスクリプトを実行するには、あなたの許可必要です。」という画面が表示される場合があります。
その場合は、以下のとおり対応していきます。
以下の画像は、別の記事を転用しているものがあります。
ファイル名やスプレッドシート上の情報が、この記事の内容を一致しない場合があります。
あらかじめご了承ください。
2. 許可を出したいアカウントをクリックする
3. 「詳細」をクリックする
4. 「無題のプロジェクト(安全ではないページ)に移動」をクリックする
5. 「許可」をクリックする
6. 「フォルダ作成」のボタンをクリックする
そうすると、以下のようにボタンをクリックすることで、スクリプトが動きます。
ここまで紹介した内容を実践すれば、動作チェックで上手くいくことが確認できるはずです。
よくある質問2|プログラムのエラー表示されたとき、どうする?
上記のようにエラーが表示されて、プログラムが動かないことがあります。
プログラムエラーが生じた場合は、ステップ1から内容をチェックしてみてください。
とくに以下の内容を間違えていると、上手く動きません。
対処2-1. セルB1に何も入力されていない
対処2-2. セルB1に入力したフォルダURLが正しくない
対処2-3. セルA4以下のファイルURLが正しくない
上記の内容を確認してから、再度ボタンをクリックしてみてください。
もし上記の対処を行っても、プログラムのエラーが止まらない場合亜h、プログラムのエラー内容を確認し、Google検索で調べるなどの追加調査を行ってみてください。
選択肢が多いほど仕事は楽しい
私は選択肢が多いほど、仕事は楽しくなると考えています。
なぜなら、選択肢があれば仕事の失敗を改善につなげることができるからです。
ここで言う選択肢とは、アイデアや閃きを指しています。
たとえば、仮に仕事で失敗したとしても「これは失敗したけど、あれなら上手く対処できるかもしれない」という選択肢があれば、活力が沸いてくるものです。
しかし、多くの人は選択肢が少ない状態で仕事をしています。
選択肢が少ないと仕事が窮屈(きゅうくつ)になる
仕事を進める上で、選択肢(アイデアや閃き)が少ないと、どうしても窮屈な進め方をせざるを得なくなることがあります。
たとえば仕事でトラブルが発生したとします。
その処理を「自分がやるか?」それとも「人に任せるか?」という2つの選択肢しかないと、どうなるでしょうか。
最終的には、空気を読んで「(本当はやりたくなけど)私がやります」と誰かが名乗り出るのを待つことになるわけです。
プログラミングで選択肢が広がる
しかし、実は「プログラミングで処理」という第3の妙案で解決できることがあります。
実際、私はプログラミングという選択肢を使って、誰も苦しめることなく作業を進めたことも多かったです。
このように多くの選択肢を持つことが仕事の楽しさを決めると思っています。
私がプログラミングについて伝えたいと思うのは、このような仕事の選択肢を広げる手段だからというのがあるのです。
GASでフォルダ内の情報をスプレッドシートに一覧するプログラムの詳細を解説
今回、フォルダ内の情報をスプレッドシートに一覧する方法を紹介してきました。
以下では、GASプログラムを解説していきます。
さて、GASプログラムについてはコピペで使えるようにしていますので、全てを理解する必要はありません。
しかし、中にはプログラムを理解したい人もいるはずです。
そこで、GASプログラムの詳細も紹介していきます。
まず今回使用しているGASプログラムを以下に記載します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
//以下をコピペしてご利用ください //プログラム0|プログラム名を付ける function moveFile() { //プログラム1|スプレッドシートの情報を取得する var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheetname = 'シート1'; var sheet = spreadsheet.getSheetByName(sheetname); //プログラム2|フォルダパスの情報を取得する var folderurl = sheet.getRange('B1').getValue(); //プログラム3|フォルダパスの情報を取得する var myArray= folderurl.split('/'); var folderid = myArray[myArray.length-1]; //プログラム4|移動したいファイルURLを取得する var Lastrow = sheet.getLastRow(); var myRange = sheet.getRange(4, 1, Lastrow-3).getValues(); //プログラム5|移動先のフォルダIDを取得する var folder = DriveApp.getFolderById(folderid); //プログラム6|ファイルを移動する for (var i = 0; i < myRange.length; i++) { if (myRange[i][0] !== ''){ var myArray = myRange[i][0].split('/') var file = DriveApp.getFileById(myArray[5]); file.moveTo(folder); } } } |
以下でプログラムについて解説していきます。
プログラム0|プログラム名を付ける
1 2 |
function moveFile() { } |
「moveFile()」というプログラム名
この名称に記載ルールはありません。
今回は「moveFile()」としましたが、好みのプログラム名に変更しても問題ありません。
なお「()」の意味については、ここでは触れません。
もし「()」の意味を知りたい人は、「GAS 引数」と検索してみると、「()」の意味を少しでも理解できるはずです。
プログラム1|スプレッドシートの情報を取得する
1 2 3 |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheetname = 'シート1'; var sheet = spreadsheet.getSheetByName(sheetname); |
以下で一行ずつ説明していきます。
プログラム1-1|アクティブなスプレッドシートを取得
1 |
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); |
spreadsheetという変数に、アクティブになっているスプレッドシートを設定
アクティブなスプレッドシートとは、現在操作しているスプレッドシートを指します。
今回は、ボタンを使ってプログラムを動かすような仕組みしています。
したがって、ボタンが設置されているスプレッドシートがアクティブなスプレッドシートの対象となります。
補足ですが、もしあなたがVBAを勉強したことがあるなら、activesheetというプログラムを見たことがあるかもしれません。
それと同じようなものだと思っていただければ、問題はないと思います。
プログラム1-2|変数に文字列「シート1」を格納
1 |
var sheetname = 'シート1'; |
sheetnameという変数に、「シート1」という文字列にする
sheetnameにシート名の情報を入れます。
ここでは「シート1」としていますが、この名前である必要はありません。
今回はたまたまアクティブなスプレッドシートの「シート1」を使っているため、「シート1」にしているに過ぎません。
大切なのは、アクティブなスプレッドシートのシート名と一致させることです。
なお、シート名が一致していないとエラーになり、プログラムが上手く動きません。
プログラム1-3|「シート1」のスプレッドシートを取得
1 |
var sheet = spreadsheet.getSheetByName(sheetname); |
sheetという変数に、プログラム1-1で変数設定したspreadsheet(アクティブなスプレッドシート)に、プログラム1-2で設定したsheetname(ここでは「シート1」)を設定する
補足ですが、2行目で「var sheetname = ‘シート1’;」と記載していますが、この一文を削除して、以下のようにしても問題ありません。
補足|プログラム1-2とプログラム1-3は1行にまとめても良い
1 2 3 4 |
var sheetname = 'シート1'; var sheet = spreadsheet.getSheetByName(sheetname); //上の2行は、以下の1行に集約可能 var sheet = spreadsheet.getSheetByName('シート1'); |
上記の書き方をすれば、1行に収めることができます。
しかし、プログラム1-2とプログラム1-3を敢えて分けているのには理由があります。
なぜなら、シート名に変更があったとき、プログラムの行を分けていた方がメンテナンスしやすいからです。
ただ、これは好みの問題でもありますので、どちらの方法でも問題ありません。
プログラム2|フォルダパスの情報を取得する
1 |
var folderurl = sheet.getRange('B1').getValue(); |
folderurlという変数に、「シート1」のセルB1の値を入れる
プログラムを動かす前に、セルB1にフォルダをしたいフォルダURLを入力しています。
そのため、セルB1の値をfolderurlという変数にフォルダURLを取得します。
プログラム3|フォルダパスの情報を取得する
1 2 |
var myArray= folderurl.split('/'); var folderid = myArray[myArray.length-1]; |
以下で一つずつ解説していきます。
プログラム3-1|フォルダURLを「/」で分割
1 |
var myArray= folderurl.split('/'); |
folderurlの値を「/」で区切って、配列にする
現在、folderurlの値(セルB1の情報)が「https://drive.google.com/drive/u/0/folders/1VtGyIKsxI6ZCB-D4rGGeRlvR1ZniWUYw」となっています。
すなわち「https://drive.google.com/drive/u/0/folders/1VtGyIKsxI6ZCB-D4rGGeRlvR1ZniWUYw」を「/」で区切って分割するため、myArrayは以下のようになります。
myArray = [ ‘https:’, ”, ‘drive.google.com’, ‘drive’, ‘u’, ‘0’, ‘folders’, ‘1VtGyIKsxI6ZCB-D4rGGeRlvR1ZniWUYw’ ]
さらに詳しく言うと以下のようになります。
myArray[1] = ”
myArray[2] = ‘drive.google.com’
myArray[3] = ‘drive’
myArray[4] = ‘u’
myArray[5] = ‘0’
myArray[6] = ‘folders’
myArray[7] = ‘1VtGyIKsxI6ZCB-D4rGGeRlvR1ZniWUYw’
[]の数値は、要素番号を表しています。
今回の事例で紹介しているフォルダURLを「/」で区切ると、要素数は「0,1,・・,6,7」の8つとなるわけです。
プログラム3-2|myArray[myArray.length-1]でフォルダパスを取得
1 |
var folderid = myArray[myArray.length-1]; |
folderidという変数にmyArray[myArray.length-1] ( = myArray[7]) を入れる
たとえば今回の例では、以下のようにプログラム内で処理され、フォルダIDを取得しています。
myArray.length = 8 のため
myArray.length -1 = 7 であることから
myArray[myArray.length – 1]
= myArray[7]
= ‘1VtGyIKsxI6ZCB-D4rGGeRlvR1ZniWUYw’
myArray.length = 8となる理由は、myArrayの要素は「0,1,2,・・・,7」となっていて、合計8コの要素数だからです。
このように「 myArray[myArray.length – 1] 」でフォルダIDを取得することができます。
プログラム4|移動したいファイルURLを取得する
1 2 |
var Lastrow = sheet.getLastRow(); var myRange = sheet.getRange(4, 1, Lastrow-3).getValues(); |
一行ずつ解説していきます。
プログラム4-1|最終行の行数を取得
1 |
var Lastrow = sheet.getLastRow(); |
sheet(ここではシート1)の最終行の行数を取得し、Lastrowという変数に格納
sheet(ここではシート1)の最終行を取得します。
このLastrowは、次のプログラムで複数のフォルダ名を一気に取得するために使います。
プログラム4-2|セルA4から(Lastrow-3)行分の範囲の値を取得
1 |
var myRange = sheet.getRange(4, 1, Lastrow-3).getValues(); |
myRangeという変数にsheet(シート1)のセルA4(行4,列1)から「Lastrow-3」だけ下に行を進んだセルまでの範囲の値を配列として取得
このプログラムは、getRangeの一般式を使って説明していきます。
上記の一般式を事例と図で解説します。
たとえば、Lastrowが15だった場合、「getRange(4, 1, Lastrow-3).getValues」は「セルA4からセルA15までの値」となります。
以下の画像は別記事のものですが、内容を理解するのに適した画像のため転用しています。
つまり、Lastrow = 15 のとき、myRangeはセルA4からセルA15までの値を取得し、プログラムでは以下のように配列として値を取得します。
具体的に言うと、以下のように値が格納されています。
myRange[i][1] = ‘フォルダ2’
myRange[i][2] = ‘フォルダ3’
myRange[i][3] = ‘フォルダ4’
myRange[i][4] = ‘フォルダ5’
myRange[i][5] = ‘フォルダ6’
myRange[i][6] = ‘フォルダ7’
myRange[i][7] = ‘フォルダ8’
myRange[i][8] = ‘フォルダ9’
myRange[i][9] = ‘フォルダ10’
myRange[i][10] = ‘フォルダ11’
myRange[i][11] = ‘フォルダ12’
myRange[i]ではなく、myRange[i][0]で値を取得するのがカギです。
補足|getValuesで値を取得すると二次元配列になる
注意したいのは、「getRange().getValues」でスプレッドシートの値を取得すると、二次元配列として格納されます。
GASで配列を扱うとき、一次元配列と二次元配列の差でエラーが発生することがあります。
もし、配列のプログラムでエラーが発生した場合は、一次元配列と二次元配列に着目すれば、解決が早まるかもしれません。
プログラム5|移動先のフォルダIDを取得する
1 |
var folder = DriveApp.getFolderById(folderid); |
プログラム3-2で設定したfolderidでGoogleDrive上のフォルダを取得
Google Drive操作ではフォルダIDを取得しないと、ファイル移動やフォルダ作成ができません。
そのため少々ややこしいですが、プログラム3でフォルダURLからフォルダIDを取得しているのです。
なおフォルダIDのみを入力すれば、プログラム3は不要です。
しかしフォルダIDのみを取得よりフォルダURLを貼り付ける方がカンタンです。
この仕組みは、プログラミングを知らない人に使ってもらうことを想定しているため、より手順がカンタンになる方法を採用しています。
したがって手順がカンタンな「フォルダURLをコピペする」方を選択しています。
プログラム6|ファイルを移動する
1 2 3 4 5 6 7 |
for (var i = 0; i < myRange.length; i++) { if (myRange[i][0] !== ''){ var myArray = myRange[i][0].split('/') var file = DriveApp.getFileById(myArray[5]); file.moveTo(folder); } } |
以下で一行ずつ解説していきます。
プログラム6-1|移動したいファイル数だけ処理を繰り返す
1 2 |
for (var i = 0; i < myRange.length; i++) { } |
i = 0, 1, 2, ・・・, 「myRange.length – 1」, 「myRange.length」 まで、{ } 内の処理を繰り返す
プログラム6-2|ファイルURLが記入されているなら処理を行う
1 2 |
if (myRange[i][0] !== ''){ } |
もし、myRange[i][0]が空ではないならば、{ } 内の処理を行う
このプログラムは、スプレッドシート上では空欄セルがmyRange[i][0]に含まれていた場合、処理を行わないようにするために入れています。
「if ( A ! == B ) 」で「AがBではないならば」を表すことができる
プログラム6-3|ファイルURLを「/」で区切る
1 |
var myArray = myRange[i][0].split('/') |
myRange[i][0]の値(ファイルURL)を「/」で区切って、配列にする
myRange[i][0]にはファイルURLが保管されています。
たとえば、「myRange[i][0] = https://drive.google.com/file/d/1Tc8EBSB80mBZn0lFJEli/view?usp=sharing」とします。
これを「/」で区切って分割するため、myArrayは以下のようになります。
myArray = [ ‘https:’, ”, ‘drive.google.com’, ‘file’, ‘d’, ‘1Tc8EBSB80mBZn0lFJEli’, ‘view?usp=sharing’ ]
さらに詳しく言うと以下のようになります。
myArray[1] = ”
myArray[2] = ‘drive.google.com’
myArray[3] = ‘file’
myArray[4] = ‘d’
myArray[5] = ‘1Tc8EBSB80mBZn0lFJEli’
myArray[6] = ‘view?usp=sharing’
ここではファイルIDを取得したいので、myArray[5]の情報が重要です。
そして、myArray[5]を次の行で利用します。
プログラム6-4|ファイルIDを取得
1 |
var file = DriveApp.getFileById(myArray[5]); |
myArray[5]の値でファイルを取得
myArray[5]にはファイルIDが格納されており、この値を活用することでファイルを操作できるようになります。
プログラム6-5|ファイルを所定フォルダに移動
1 |
file.moveTo(folder); |
fileをfolderへ移動する
「プログラム6-4で設定したfile」を「プログラム3-2で設定したfolder」に移動します。
「A.moveTo(B)」というプログラムを活用することで、「AをBへ移動」させることができます。
プログラムの説明は以上です。
Google Apps Script(GAS)について詳しく理解したいなら
Google Apps Script(GAS)を活用すると、仕事を効率化できる幅を広げることができます。
たとえば私が実際にGASを活用して効率化してきた作業は以下の動画で解説しています。
動画を見てみると、あなたの仕事にどのようにGASを応用すればいいのかイメージが浮かぶこともあると思います。
ぜひご覧ください。
GASの使い方・始め方を知らない人にはこちらの記事・動画がオススメ
この機会に、「GASを使い方を知りたい」と思った人もいるかもしれません。
そのように感じている人は、ぜひ以下の記事をご覧ください。
10分程度でGoogle Apps Scriptを使うためのスタート地点に立てるように解説をしています。
GASで出来ることを知らない人はこちらの記事・動画がオススメ
GASの始め方を理解する前に、やっておくことがあります。
それは、GASを使って何ができるのかを理解しておくことです。
なぜならGASの使い所を知らないと、仕事で使えないからです。
仕事でどう活用するかをイメージしないまま学んでも、効果的な学習ができません。
そこで、このサイトでもいくつか事例を使って、GASの実践方法を紹介しています。
興味がある人は以下の記事もご覧ください。
オススメの書籍を紹介
書籍に関しては、以下を読んで購入しました。
GASの全体感をつかむには良いと思います。
ただし、実際の勉強は書籍よりもウェブサイトを活用してきました。
はっきり言って、ウェブサイトだけでも十分に勉強できるほど数多くの情報がアップされています。
書籍で全体感をつかんだら、ウェブサイトでの学習に切り替えたほうが良いのが私の考えです。
Googleスプレッドシートを効率的に操作したいなら
この記事ではGASを活用した仕事の効率化の事例を紹介してきました。
しかしGoogleスプレッドシートの仕事を早くすることを目指すなら、GAS以外の方法もあります。
たとえば、以下の方法です。
上記の内容については、以下の動画で紹介しています。
ぜひGoogleスプレッドシートを上手に扱えるようになりたい人はご覧いただきたいです。