GASで二次元配列に特定の要素が含まれているかを判定する方法


flat

photo credit: mikecogh Country Railway via photopin (license)


みなさん、こんにちは!
タカハシ(@ntakahashi0505)です。

Google Apps Scriptでフォーム送信メールからデータを抽出してスプレッドシートに登録するツールを作成しております。

前回はこちらの記事でした。

Google Apps Scriptでスプレッドシートの列データを配列として取得する方法
Google Apps Scriptでフォーム送信メールからデータを取得してスプレッドシートにまとめるツールを作成しています。今回はスプレッドシートの列データを配列として取得する方法についてお伝えします。

スプレッドシートの列データを配列として取得する方法をお伝えしました。

この取得した配列内に、特定のIDが含まれているかどうかを判定したいのですが、しかしこの配列は「二次元配列」…

ちょっとテクニックが必要です。

ということで、今回はGASで二次元配列に特定の要素があるかを判定する方法をお伝えします。

では、行ってみましょう!

スポンサーリンク

前回のおさらい

では、前回のおさらいからです。

題材とするスプレッドシートのシートはこちらです。

GASでメッセージIDをスプレッドシートに書き出す

この、C列つまり「メッセージID」の中に、特定のIDが含まれているかどうかをチェックしたいのです。

前回は、以下のスクリプトで、メッセージIDの見出しを除く範囲について配列で取得するところまでを進めました。

const hasId = () => {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getRange(2, 3, sheet.getLastRow() - 1).getValues();
  console.log(data);
}

このスクリプトの結果がこちら。

シートの列範囲のデータをログ出力

このように、二次元配列になっちゃうんです。

今回は、この二次元配列に特定のIDが含まれているかどうかを判定する方法をお伝えしていきます。

flatメソッドで一次元にする

まず、二次元配列のままでは扱いづらいので、「一次元化」しちゃいましょう。

flatメソッドを使うと、配列の深さを揃えることができます。

書式はこちらです。

Arrayオブジェクト.flat(深さ)

深さを整数で与えると、Arrayオブジェクトをその深さにフラット化して揃えてくれるのです。省略時は1となります。

今回は一次元化したいので、深さは1。省略してOKですね。

ということで、以下のようなスクリプトを作成しました。

const hasId = () => {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getRange(2, 3, sheet.getLastRow() - 1).getValues();
  console.log(data.flat());
}

取得した配列をflatメソッドで深さ1に揃えるのです。

結果はこちら。

GASで配列を一次元にフラット化する

ちゃんと一次元配列にフラット化されていますね!

includesメソッドで存在するかどうかを判定する

続いて、この一次元化された配列の中に、特定のIDが含まれているかどうかを判定します。

その場合は、以下のincludesメソッドを使うことができます。

Arrayオブジェクト.includes(要素)

Arrayオブジェクトに要素が含まれていればtrue、そうでなければfalseを返します。

では、以下のスクリプトでテストしてみましょう。

const hasId = () => {
  const sheet = SpreadsheetApp.getActiveSheet();
  const data = sheet.getRange(2, 3, sheet.getLastRow() - 1).getValues();
  const id = '172090bddef1e273';
  console.log(data.flat().includes(id));
}

フラット化された配列に対してincludesメソッドを使って「’172090bddef1e273’」が含まれているかを判定します。

結果はこちらです。

GASで配列に要素が含まれているかを判定する

今回は、範囲に該当のデータが含まれているのでtrueと出力されました。

対象範囲に存在しないデータもチェックしてみてください。

まとめ

以上、GASで二次元配列に特定の要素があるかを判定する方法をお伝えしました。

  • flatメソッドで、二次元配列を一次元にフラット化する
  • inludesメソッドで、配列内に要素があるか判定する

組み合わせてよく使うと思いますので、ぜひマスターしましょうね。

次回は、今回までの内容を踏まえてメールからデータを抽出するツールを完成させていきたいと思います。

GASでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版
Google Apps Scriptでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールを作成しています。これまでお伝えしてきた内容を組み合わせてツールの完成をさせていきます。

どうぞお楽しみに!

連載目次:GASで正規表現を使ってデータを抽出&登録

正規表現を使うとGoogle Apps ScriptでメールやHTMLドキュメントからデータを抽出することができます。本シリーズでは、フォーム送信の通知メールからデータを抽出してスプレッドシートに追加するツールの作成を目指します。
  1. Google Apps Scriptで正規表現を使って必要な情報を抽出する最も簡単なスクリプト
  2. Google Apps Scriptで正規表現でマッチした文字列から不要な部分を削除する
  3. Google Apps ScriptでGmailの受信メールから正規表現でデータを抽出する
  4. Google Apps Scriptでメールから正規表現で抽出したデータをスプレッドシートに蓄積する方法
  5. Google Apps ScriptでGmailのメッセージIDを取得する方法
  6. Google Apps Scriptでスプレッドシートの列データを配列として取得する方法
  7. GASで二次元配列に特定の要素が含まれているかを判定する方法
  8. GASでフォーム送信メールからデータを取得してスプレッドシートに蓄積するツールの完全版

タイトルとURLをコピーしました