GASは5分を超えるスクリプトの実行ができません。そこで、スプレッドシートのデータを配列に格納する処理が必要になります。 スプレッドシートを二次元配列に格納 シートをgetRange().getValues()で二次元配列 … まだ理解が不十分の場合は、先に「オブジェクト」を学ぶと良いと思います。「オブジェクト」は基本のみ説明しています。, まずは「追加」からです。「先頭」に値を追加する場合は「unshift()」、「末尾」に値を追加する場合は「push()」を使います。 var ss = SpreadsheetApp.getActiveSpreadsheet();var sh = ss.getActiveSheet();var ary = []; 次に、配列に格納した値を要素数を指定しながらスプレッドシートの右隣りに貼り付けてみます。 下記のサンプル4では、, で変数iの初期値を0とし、ary.lengthで配列変数aryの要素数を取得し(今回は5の数値が取得されます)、変数iがary.lengthより小さい間は処理を繰り返します。. 開始位置は「10」の次、つまりインデックスが「1」ですね。そして今回は削除する値がないので「0」、その後に追加したい値を続けて記述します。, では最後に元の配列の状態に戻して終わりましょう。先ほど追加した「25」と「35」を削除して、「20」と「30」を追加すればいいですね。 sh.getRange(1 + i, 4).setValue(ary[i][0]);sh.getRange(1 + i, 5).setValue(ary[i][1]);sh.getRange(1 + i, 6).setValue(ary[i][2]); そのため、[i](変数aryの1番目~5番目の行)で配列の行の要素数を指定し、次の[0]~[2](変数aryの1番目~3番目の列)で配列の列の要素数を指定して、格納されている値をスプレッドシートのD列~F列に記載していきます。, 前述の「二次元配列を宣言、作成してスプレッドシートに貼りつける」でも既にやってはいますが、配列の大きさを調べた上で、貼り付けに必要な範囲を確保してスプレッドシート貼り付ける事もできます。. var ary = [[‘A1’, ‘B1’, ‘C1’], [‘A2’, ‘B2’, ‘C2’], [‘A3’, ‘B3’, ‘C3’], [‘A4’, ‘B4’, ‘C4’], [‘A5’, ‘B5’, ‘C5’]]; sh.getRange(1,1,rows,cols).setValues(ary); で配列全体をスプレッドシートに記入するための範囲を確保しつつ、配列に代入された値をスプレッドシートに記入しています。. [0, 5]のような配列の形ではなく、(0, 5)の形で( )の中に数字を入れて追加します。, それでは今度は「削除」する方法を見ていきましょう。 では、「二次元配列」の場合は、簡単にいうと1つの配列の中にさらに「配列」が「,(カンマ)」で区切られて格納されているものになります。, 上記の二次元配列は、下図のようにまず大きな箱(緑色)があり、その中に小さな箱(水色)が3つずつ入っています。 インデックスは「0 〜 2」までなので、「i < 3」又は「i <= 2」と書けばいいですね。, では、「fruits」配列に「pineapple」が追加された場合はどう記述すれば良いでしょう。 【GAS】JavaScript基本⑤ 〜 複数の値を扱う「配列」「オブジェクト」を理解しよう, 例えば「人」の情報について扱う場合に、「名前」や「年齢」など1つずつ「変数」に代入して扱うことはできましたね。, 上記のように1つずつ変数を用いて扱うこともできますが、「人」の情報が複数ある場合に1つにまとめて管理できると便利ですね。そのような場合に使うのが「配列」になります。, 変数名は一般的に「複数形」が使われるので、変数「persons」に「配列」の形で代入するとこのようにスッキリ書くことができます。, まずは配列の書き方です。「[ ](角括弧)」と「,(カンマ)」を使用して記述します。, 例えば、下記のような書き方で、「①文字列のみ」、「②数字のみ」、「③文字列と数字を含んだ配列」などがあります。, 上記③を変数に「代入」する場合は、次のように変数名を「複数形」にして記述するのが一般的です。, 「配列」は1つの大きな箱(配列名:persons)の中に、それぞれの「値」がそれぞれの「箱」に入っているイメージを持ってもらえるとわかりやすいかと思います。, 「箱」の数と「値」の数は同じ「3つ」ですが、配列は「インデックス」という番号が振られ最初が「0」からスタートすることになるため注意が必要です。また、「値」のことを「要素」といいます。, では、次に「配列」からそれぞれの値を出力してみましょう。それぞれの値にアクセスするには「インデックス」を使って(「キー」として)次のように記述します。, 「zak-papa」を「zak-mama」に、「35」を「28」に、「よろしく」を「ヤッホー」に更新してみましょう。, では、配列の「インデックス」がない場合(インデックスが「3」の場合)、どのようになるでしょうか。スクリプトを実行してみると、次のように新しい要素の「追加」になります。, ただ、配列に要素を追加する場合は「push()」(後述)メソッドを使う場合が多いです。「push()」の使い方は後ほど説明します。, 最後に、配列の中に値がいくつあるか「要素数」を出力する方法も覚えておきましょう。 【GAS】JavaScript基本③ 〜 if文、switch文で「条件分岐」をしてみよう この中の、 [[a1, b1, c1], [a2, b2, c2], [a3, b3, c3], [a4, b4, c4], [a5, b5, c5]] が二次元配列の状態になっています。 スプレッドシートに記載されているデータと、上記の二次元配列のデータを見比べると、二次元配列のイメージがなんとなくついてくるようにも思われます。 以前の記事で、Google Apps Scriptにおける配列の重要性についてご紹介しましたが、今回は行と列を格納する事のできる二次元配列についてご紹介します。, まず二次元配列とは何なのかについてみていきます。 その前にまず、下記のようなシートを用意します。. これは、インデックスの「1」番目を「開始位置」として、そこから「2つ」分を削除するという意味になります。, 実際に実行してみましょう。「20」と「30」が削除され、「10」と「40」の2つが残りましたね。, 続いて、残った2つの値の配列の間に「25」と「35」の2つの値を入れてみましょう。 実は「splice()」という便利なメソッドが用意されています。, splice ( 変化を開始するインデックスの位置,  削除数,  追加する値①,  追加する値②, ... ), 少し分かりにくいので今回もこちらの配列(numbers)を使って見ていきましょう。, 「splice(1, 2)」を実行したらどのような結果になるでしょうか。 このように同じ数の削除と追加は値を「変更」していることになりますね。, これまで見てきた配列は「一次元配列」であり、1つの配列の中に「値」が「,(カンマ)」で区切られて格納されていました。 【GAS】JavaScript基本④ 〜 for文、while文で「繰り返し(ループ)」処理をしてみよう この書き方も是非覚えておきましょう。, 続いて、配列の「先頭」や「末尾」を操作(追加・削除)する便利なメソッドを説明します。, ここからは少し応用になります。上記で説明した基本を理解して余力があれば取り組みましょう。 sh.getRange(1,4,rows,cols).setValues(ary); で配列全体をスプレッドシートに記入するための範囲を確保しつつ、配列に代入された値をスプレッドシートのD列~F列に記入しています。, スプレッドシートへの貼り付けに必要な範囲を確保し、二次元配列のデータを貼り付ける 処理結果, で、変数ary[i][0]~ary[i][2]に格納された値を結合し、スプレッドシートのD列に記入しています。, 以上、二次元配列を利用した例をいくつかご紹介しましたが、以前ご紹介した配列の記事と同様に処理速度においても非常に優れていますので、Google Apps Scriptを使用していく上で二次元配列は欠かせないものです。, Google Apps Script(GAS)お仕事・副業探し(Google Apps Script・GAS)Googleフォーム(Google Apps Script・GAS)Gメール(Google Apps Script・GAS)HtmlService(Google Apps Script・GAS)return(Google Apps Script・GAS)エラー検知(Google Apps Script・GAS)スクリプトエディタ(Google Apps Script・GAS)スプレッドシート(Google Apps Script・GAS)セル操作(Google Apps Script・GAS)トリガー(Google Apps Script・GAS)ファイル操作(Google Apps Script・GAS)メッセージボックス(Google Apps Script・GAS)ログ出力(Google Apps Script・GAS)処理速度(Google Apps Script・GAS)列、行(Google Apps Script・GAS)文字列操作(Google Apps Script・GAS)日時(Google Apps Script・GAS)条件分岐(Google Apps Script・GAS)演算子(Google Apps Script・GAS)繰り返し処理(Google Apps Script・GAS)配列(Google Apps Script・GAS)関数の実行(Google Apps Script・GAS), Google Apps Scriptでスプレッドシートの処理を自動化する上で、配列を扱えるようになるのは非常に重要です。 なぜかというと、配列を使って処理を行わないと、処理の量や内容によっては非常に、とても、すごく重くなるからです。 今回は、Google Apps Scriptにおける配列についてご紹介します。, 今回は、Google Apps Scriptで、変数に代入した値などを出力して、スクリプトの動作が正しいかを確認するための便利なスクリプトをご紹介します。, Google Apps Scriptでフリーランスのお仕事!高額報酬ありの求人サイトは?, 【Google Apps Script(GAS)】文字列の置換と削除(replace), 【Google Apps Script(GAS)】文字列の改行(メッセージボックスの改行), 【Google Apps Script(GAS)】Googleフォームの回答内容を、好みの形でスプレッドシートに集計する. この「4」という数字は、配列の「要素数」と同じですね。要素数を出力するものは上記でも説明した「length」プロパティがありました。, この書き方であれば、要素数が5個でも10個でも増えても何も変更する必要はないですね。 前回は「for」文、「while」文による「繰り返し(ループ)」処理についてお伝えしました。, そして、GASのための「JavaScript」シリーズ第5弾は、「配列」と「オブジェクト」です。, これまでは1つのデータを「変数」に代入して使用していましたが、データが「複数」になると1つ1つ変数に代入して使用していくのは効率的とは言えません。, そのような場合に便利なものが「配列」と「オブジェクト」です。配列やオブジェクトを使えば複数の値も変数1つで扱うことができます。, また、GASでは特に「配列」の扱いが非常に大事になってきます。なぜなら、GASでは1回あたりの処理時間に制限(6分)があり、「配列」を利用して値を一気に取得したり書き込んだりすることで処理スピードを格段に向上させることができるからです。, 「配列」は内容が盛り沢山となりますので、途中で休憩しながら読み進めていただければと思います。, 【GAS】JavaScript基本① 〜 基本的な「書き方」や「変数」を理解しよう 1つ目の「.(ドット)」を使って記述することが一般的です。, 続いて、オブジェクトの中身を「更新」してみます。更新する場合は、次のように記述します。, では、配列と同じように「zak-papa」を「zak-mama」に、「35」を「28」に、「よろしく」を「ヤッホー」に更新してみましょう。, また、オブジェクトの「プロパティ」にないものを記述すると次のように新しい要素の「追加」になります。, 以上、「配列」と「オブジェクト」についてお伝えしました。盛り沢山の内容で少し疲れましたね。お疲れ様でした。, プログラミング初心者には最初は理解が難しかったかもしれませんが、「配列」も「オブジェクト」も、「条件分岐」や「繰り返し処理」と同じく他の言語でも同じように扱うことができますので是非使い方をマスターしておきましょう。, そして、GASにとって特に「配列」は、データの処理時間を左右する重要な役割を持つものになります。こちらの記事でスプレッドシートのデータ取得に関して説明していますので実際の使い方はご確認いただければと思います。, zak-papaです。普段は人事部で仕事をしていますが現在は長期の育児休業を取得中です。自身のアウトプットの場及び備忘録も兼ねてブログを始めました。, 本ブログでは、子育てに関する情報やノンプログラマー向けに実務に活かせる情報をお届けしたいと思っています。【2020年1月時点】. 特に「push()」は使用頻度が高いのでしっかりと使い方を覚えておきましょう。, 先ほどは配列の要素の「先頭」と「末尾」のみに対して操作(追加・削除)を行ってきました。, では、配列の「途中」に追加をしたり、または先ほどできなかった「複数の要素の削除」をする場合はどのようにしたらよいでしょうか。 配列を利用することで値を一気に取得したり書き込んだりでき、処理スピードを格段に向上させることができます。, データ量が大きくなればなるほどその恩恵を得られると思います。今回は概要のみの説明になりますので、実際の使用方法はまた別の機会にお伝えできればと思います。, 「一次元配列」では、「 配列名[インデックス] 」という形で「インデックス」を「キー」として値を取得することができましたね。, それでは、スプレッドシートの「C2」の値を「二次元配列」の状態から取得するにはどのように記述すれば良いでしょうか。 【Python】Requests、Beautiful Soupでスクレイピングした結果をスプレッドシート、Excelに出力しよう, 【GAS】スクリプトエディタからワークブック、ワークシート、セル範囲を取得してみよう, 【Python】「gspread」で「 Googleスプレッドシート」のセルの値を取得・入力するなどセルを操作してみよう, 【Python】「gspread」で「 Googleスプレッドシート」のワークブック、ワークシートを操作してみよう, 【GAS】JavaScript基本④ 〜 for文、while文で「繰り返し(ループ)」処理をしてみよう, // インデックス「1」の位置から「2つ分(25、35)」を削除して「2つ分(20、30)」を追加( = 変更), ※「C2」を1つのセルとして取得する簡単な方法はありますが、今回は「二次元配列」から要素を取得する方法をお伝えしています。, JavaScript基本④ 〜 for文、while文で「繰り返し(ループ)」処理をしてみよう, JavaScript基本⑤ 〜 複数の値を扱う「配列」「オブジェクト」を理解しよう. 「要素数」を出力するには「length」というプロパティを使用し、次のように「配列名」と「length」を「.(ドット)」で繋げて記述します。, 最初の「zak-papa」の配列に戻って要素数を出力してみましょう。要素は「3つ」あったので「3.0」と出力されます。, 配列の中身を順に取り出すこともよくあります。今回は「fruits」配列を使って説明していきます。, こちらは配列の要素の出力と更新のところでも説明したので問題ないですね。 もちろん「配列」でも同じように改行して書くことができました。, 最後の「,(カンマ)」は付けても問題なく動きますが、付け外す手間もあるのでそのまま付けておくのが良いでしょう。, 変数に「代入」する場合は、配列と同じように変数名を「複数形」にして記述するのが一般的です。, 配列は「インデックス」という「箱」でしたが、オブジェクトは「プロパティ」という「箱」に入っているイメージを持ってもらえるとわかりやすいかと思います。 こんにちは! Yuki (@yukibnb) です。前回Google Apps Script (GAS) で一次元配列の要素を追加・削除する方法をGIF動画付きで解説しました。 www.yukibnb.com今回はその応用として二次元配列の要素を追加・削除する方法をサンプルやGIF動画を使ってやさしく解説します。 見慣れない形なので最初は理解が難しかったかもしれません。, しかし、GASでは「スプレッドシート」だけでなく、「Gmail」などを扱う際もこの「二次元配列」を使ってメールを取得したりします。復習してしっかりと理解しておきましょう。, 続いて「オブジェクト」です。「連想配列」とも呼ばれ、他言語でいう「ハッシュ(Ruby)」や「辞書型(Python)」と同様のものになります。, オブジェクトは配列と同じく「複数」の値を扱うときに便利なものですが、オブジェクトは「名前」付きで値を管理することができ、例えば、「35」という数字は「age」、つまり「年齢」を表していることがすぐに分かります。, また、オブジェクトは順番を保持していないのでログ出力の際は必ずしも記述した順番にはならないということも覚えておきましょう。, まずはオブジェクトの書き方です「{ }(波括弧)」と「,(カンマ)」を使用して記述します。, { }(波括弧)の中では下記のように「{ プロパティ(キー)① : 値① , プロパティ(キー)② : 値② }」の書き方をします。 ※「C2」を1つのセルとして取得する簡単な方法はありますが、今回は「二次元配列」から要素を取得する方法をお伝えしています。, 先ほどの「箱」のイメージで見てみましょう。 www.yukibnb.com, 今回はその応用として二次元配列の要素を追加・削除する方法をサンプルやGIF動画を使ってやさしく解説します。, 「一次元配列と二次元配列の違いって?」、「一次元配列の要素を追加・削除する方法って?」という方はまず上記ふたつの記事をささっとお読み頂くことをおすすめします。, 『priceListにはレモン、オレンジ、桃の料金が掲載されている。この表にリンゴの料金も掲載したい』という場合、一次元配列["apple", "JPY250"]を追加する必要があります。, これが「二次元配列内の一次元配列を丸々操作する」ということです。行を追加するイメージです。, 次に『priceListにはレモン、オレンジ、桃の料金が掲載されている。料金以外に産地も掲載したい』という場合、["orange","JPY150"]に産地を追加して["orange","JPY150","Brazil"]とする必要があります。, これが「二次元配列内の一次元配列の中の値を操作する」ということです。列を追加するイメージです。, 括弧内に一次元配列["apple", "JPY250"]を入力することで、二次元配列priceListの先頭に一次元配列["apple", "JPY250"]を追加しました。, 括弧内に一次元配列["apple", "JPY250"]を入力することで、二次元配列priceListの末尾に一次元配列["apple", "JPY250"]を追加しました。, 二次元配列priceListの先頭の一次元配列["lemon","JPY100"]を削除しました。, 二次元配列priceListの末尾の一次元配列["peach","JPY200"]を削除しました。, 二次元配列の中の一次元配列はpriceList[インデックス番号]で指定できます。, 例えば["orange","JPY150"]を指定したい場合、priceList[1]と書けばOKです。, そして["orange","JPY150"]の先頭に値を追加したい場合、priceList[1].unshift(値)と書きます。, priceListのインデックス番号1、["orange","JPY150"]の先頭に産地の"Brazil"を追加しました。, priceListのインデックス番号1、["orange","JPY150"]の末尾に産地の"Brazil"を追加しました。, priceListのインデックス番号1、["orange","JPY150"]の先頭の要素"orange"を削除しました。, priceListのインデックス番号1、["orange","JPY150"]の末尾の要素"JPY150"を削除しました。, 今回解説した方法にfor文などのループを組み合わせると、スプレッドシートを高速で操作できるようになります。, 当ブログでは民泊運営や様々な業務を自動化・効率化するための情報を紹介しています。Twitterで最新記事や人気記事をお知らせしていますので、是非フォローお願いします!, 海外製SaaSの日本事業をしています。縁あって全く異なる民泊業界にも2016年から関わっています。民泊業務や各種業務を自動化・効率化するためのブログを執筆しています。お気軽にコメント・お問い合わせください :), 業務効率化とおもてなし力アップを同時にするために、外国から来るお客様向けに各種家電用の英語シールを作りました。↓↓↓, 民泊向けのオリジナル地図(アクセスマップ)作成のご依頼はこちらからお願いします。↓↓↓, 海外製SaaSの日本事業をしています。縁あって全く異なる民泊業界にも2016年から関わっています。民泊業務や各種業務を自動化・効率化するためのブログを執筆しています。, こんにちは! Yuki (@yukibnb) です。今回はGoogle Apps Script…, こんにちは! Yuki (@yukibnb) です。LINE Messaging APIとGoog…, こんにちは! Yuki (@yukibnb) です。Google Apps Script (GAS)…, 2020-10-31こんにちは! Yuki (@yukibnb) です。前回はGoogle A…, //ログ⇒[["apple","JPY250"],["lemon","JPY100"],["orange","JPY150"],["peach","JPY200"]], //ログ⇒[["lemon","JPY100"],["orange","JPY150"],["peach","JPY200"],["apple","JPY250"]], //ログ⇒[["orange","JPY150"],["peach","JPY200"]], //ログ⇒[["lemon","JPY100"],["orange","JPY150"]], //二次元配列のインデックス番号1、["orange","JPY150"]の先頭に要素を追加する, //ログ⇒[["lemon","JPY100"],["Brazil","orange","JPY150"],["peach","JPY200"]], //二次元配列のインデックス番号1、["orange","JPY150"]の末尾に要素を追加する, //ログ⇒[["lemon","JPY100"],["orange","JPY150","Brazil"],["peach","JPY200"]], //二次元配列のインデックス番号1、["orange","JPY150"]の先頭の要素"orange"を削除する, //ログ⇒[["lemon","JPY100"],["JPY150"],["peach","JPY200"]], //二次元配列のインデックス番号1、["orange","JPY150"]の末尾の要素"JPY150"を削除する, //ログ⇒[["lemon","JPY100"],["orange"],["peach","JPY200"]], 【応用編第3話】コピペでOK!スプレッドシートを使ってLINE BOTにスタンプや画像を返信させる方….