[ノンプロ研]GAS初級講座7期DAY6補講

GAS

どうも。つじけ(tsujikenzo)です。2020年11月から始まりましたノンプロ研GAS初級講座7期ですが、このシリーズでは講座中では時間の都合でお伝えできなかったことなどを、全6回+おまけという感じでお届けしております。本日は6回目で最終回です。涙💦

前回のおさらい

前回は「スプレッドシートの操作・基礎」について学びました。Spreadsheet APPをトップレベルオブジェクトとしたSpreadSheetオブジェクトSheetオブジェクトRangeオブジェクトの階層構造でスプレッドシートを掴んでいきました。

set/get Value(s)メソッドでスプレッドシートを操作できて感動でしたね。

[ノンプロ研]GAS初級講座7期DAY5補講
どうも。つじけ(tsujikenzo)です。2020年11月から始まりましたノンプロ研GAS初級講座7期ですが、このシリーズでは講座中では時間の都合でお伝えできなかったことなどを、全6回+おまけという感じでお届けしております。本日は5回目...

DAY6補講 スプレッドシートの操作(実践編)

アジェンダ

  1. Arrayオブジェクト
  2. 配列を使ったデータ処理
  3. 構造化データ

今回は配列の操作を極めます。配列の操作を極めることが、実践で戦うことの第一歩だからです。配列を操作する組み込みオブジェクト[Arrayオブジェクト]のメンバー(プロパティとメソッド)をガンガン紹介していきます。

Arrayオブジェクト

プロパティ

Arrayオブジェクト.length

メソッド

Arrayオブジェクト.includes(値)

Arrayオブジェクト.indexOf(値)

Arrayオブジェクト.flat()

Arrayオブジェクト.push(値)

Arrayオブジェクト.shift()

flat()メソッドの引数に’Infinity’’を渡すと、強制的に1次元配列に変換するので是非覚えておいて損は無いと思います。

“` const array = [[[[‘a’]]]]; console.log(array.flat(Infinity)); //[‘a’] “`

Array.prototype.flat() - JavaScript | MDN
flat() は Array インスタンスのメソッドで、すべてのサブ配列の要素を指定した深さで再帰的に結合した新しい配列を生成します。

※Infinityは無限大を表すグローバルプロパティです。

Infinity - JavaScript | MDN
グローバルプロパティ Infinity は無限大を表す数値です。

破壊的メソッド

Arrayオブジェクト.push(値)

Arrayオブジェクト.shift()

などは実行すると元の配列を破壊してしまいます。(配列が参照渡しだからです。)なので、元の配列はそのまま残しておいて、変化を加えた新たな配列として操作したい場合は、配列の複製を作成してから破壊的メソッドを使用する必要があります。

配列を複製するメソッド

講座では省きましたが、これらの2つはメソッドに引数を与えなければ、どちらも「配列の複製を作成するメソッド」になります。引数を与えるとどんな処理を行うかの説明は割愛しますので、リファレンスを参照ください。

Array.prototype.slice() - JavaScript | MDN
slice() は Array インスタンスのメソッドで、配列の一部を start から end (end は含まれない)までの範囲で、選択した新しい配列オブジェクトにシャローコピーして返します。 ここで start と end はその配列に含まれる項目のインデックスを表します。元の配列は変更されません。
Array.prototype.concat() - JavaScript | MDN
concat() は Array インスタンスのメソッドで、2 つ以上の配列を結合するために使用します。 このメソッドは既存の配列を変更せず、新しい配列を返します。

実際にコードを動かして確認してみましょう。membersというオリジナルの配列には変更を加えたくないのに、8行目までの書き方だと要素が追加されてしまっていますね💦

“` function myFunction6_05_2() { let members = [[‘Bob’, 25, ‘apple’]]; let members2 = members; members2.push([‘Jay’, 28, ‘grape’]); console.log(members); console.log(members2); members = [[‘Bob’, 25, ‘apple’]]; members2 = members.slice(); //concat()でも可 members2.push([‘Andy’, 35, ‘banana’]); console.log(members); console.log(members2); } “`

なので、9行目以降のように、事前に配列の複製を作成する必要があります。

※ちなみにスプレッド構文[…配列名]を使うことで、配列の複製を簡単に作成することができます。今回はメソッドの紹介をしていたので、スプレッド構文はご紹介しませんでした。

“` const members2 = […members];

“`

上記のletを使った書き方がイマイチ理解できないという方は下記写経にチャレンジしてみてくださいね。

配列を使ったデータ処理

スプレッドシートの値を操作するのは、.getDataRange().getValues()で一度に2次元配列に格納してからです。皆さんにこれから沢山やっていただきたいことは「2次元配列で取って、配列を操作して、2次元配列でsetValues()」です。

赤枠のように単体セルを操作するのではなく、青枠のように、データのある範囲を.getDataRange()メソッドで2次元配列で取得して[2行目][B列]を配列のインデックスで操作するイメージです。

構造化データ

既にデータベースを取り扱うRDB(リレーショナルデータベース)ソフトを触っている方は自然と身近な存在になっていると思いますが、シートに「結合セル」や、グラフなどの画像、他のシートからの参照などがあるとデータが取れなかったり、狙い通りのセルにアクセスできなかったりします。

なのでデータをExcelなどの表計算ソフトで扱う場合は、DOVパターンという意識が必要になってきます。(データベースの基礎については後日ブログ連載を開始します)

ExcelのワークシートをDOVパターンで構成する【方法とメリット】
Excelは学生からビジネスパーソンまで幅広い層の方が使用しています。 Excelは表計算ソフトです。データを入力し,それを計算,グラフや表などを活用しわかりやすく表示できます。しかし,これらを効率的に行うのは意外と難しいもの。Excelの

まとめ

以上で、DAY6の振り返りと補足でした。全講座6回は以上となります。お疲れ様でした~。(寂しい)

残すはいよいよ卒業制作のLT発表のみです!ノンプロ研ペアプロ部では卒業制作を一緒に考えましょうという企画もありますので、ぜひSlackを覗きに来てください!では卒業LTで会いましょう~。

このシリーズの目次

  1. [ノンプロ研]GAS初級講座7期DAY1補講 はじめてのGAS
  2. [ノンプロ研]GAS初級講座7期DAY2補講 制御構文
  3. [ノンプロ研]GAS初級講座7期DAY3補講 関数・配列
  4. [ノンプロ研]GAS初級講座7期DAY4補講 オブジェクト・GASの世界
  5. [ノンプロ研]GAS初級講座7期DAY5補講 スプレッドシートの操作
  6. [ノンプロ研]GAS初級講座7期DAY6補講 スプレッドシートの操作(実践編)
  7. [GAS]for文とは何か(歴史編)
タイトルとURLをコピーしました