【GAS GoogleAppsScript | スプレッドシート】特定の列をキーとしてデータを取り出す!

スポンサーリンク

特定の列をキーとしてデータを取り出す!

GASでスプレッドシートを処理するプログラムを作っていると、表の中の「特定の列をキーにして、該当する値のデータを抽出したい」という場面がよく発生します。

実現するには、色々方法はありますが、今回は配列を検索するArrayオブジェクトのindexOfメソッドを使った方法を紹介します!

次のサンプルでやっていきましょう!

サンプル

上のサンプルで、「名前列」をキーにして「明智光秀」の行データを取り出します。

実行順序

プログラムの実行順序は次のように行います。

  1. 表を配列で取得する(values1)
  2. 検索対象の名前列を配列として取得する(values2)
  3. flatメソッドで「2」の配列を1次元に変換(indexOfメソッドを使うため)
  4. 配列(values2)からindexOfメソッドで「明智光秀」のインデックス番号を取得
  5. 「4」のインデックス番号を使って配列(values1)の該当データを取り出しログに出力する

実際のコードが次になります。

function test(){
  
  // 表を配列で取得する(values1)
  var values1 = SpreadsheetApp.getActiveSheet().getRange("A1:C7").getValues()
  
  // 検索対象の名前列を配列として取得する(values2)
  var values2 = SpreadsheetApp.getActiveSheet().getRange("A1:A7").getValues()

 // flatメソッドで「2」の配列を1次元に変換(indexOfメソッドを使うため)
 values2 = values2 .flat()
 
  // 配列(values2)からindexOfメソッドで「明智光秀」のインデックス番号を取得
  var index = values2.indexOf("明智光秀")
  Logger.log(index) // 3
  
  // 「4」のインデックス番号を使って配列(values1)の該当データを取り出しログに出力する
  Logger.log(values1[index]) // [明智光秀, 1組, 411.0]

}

コードの解説

まずは、データの操作に必要なセルの範囲を配列をして取得します。

※「1」と「2」の表を配列で取得する方法は以下の記事で説明していますので参考にしてください。

そして、2つ目に取得した、検索列となる名前列の配列values2の中の「明智光秀」のインデックス番号を取得したいのですが、indexOfメソッドは1次元配列である必要がありますので、

// flatメソッドで「2」の配列を1次元に変換(indexOfメソッドを使うため)
values2 = values2 .flat()

の部分で、2次元配列(values2)を1次元配列に変換しています。

変換には、Arrayオブジェクトのflatメソッドを使っています。

構文

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

「深さ」を整数で指定すると、深さを揃えてくれる便利なやつです。

例えばこんな感じになります。

function test_flat() {
  
  var array = [[1,2,3],[4,5,6],[7,8,9]];
  
  var new_array = array.flat();
  
  Logger.log(new_array); //[ 1, 2, 3, 4, 5, 6, 7, 8, 9 ]
   
}

なので、次のように

// 検索対象の名前列を配列として取得する(values2)
  var values2 = SpreadsheetApp.getActiveSheet().getRange("A1:A7").getValues()

values2は、次のような2次元配列なので

[[名前], [武田信玄], [織田信長], [明智光秀], [豊臣秀吉], [毛利元就], [黒田官兵衛]]

flatメソッドを使うことで、次のような1次元配列になります。

[名前, 武田信玄, 織田信長, 明智光秀, 豊臣秀吉, 毛利元就, 黒田官兵衛]

values2が1次元配列になったので、indexOfメソッドで「明智光秀」のインデックス番号を取得します。

構文

indexOf(キー)

  // 配列(values2)からindexOfメソッドで「明智光秀」のインデックス番号を取得
  var index = values2.indexOf("明智光秀")
  Logger.log(index) // 3

インデックス番号が3ということが分かりました。

このとき注意して欲しいのは、配列は0番から始まりますので、インデックス番号の「3」は4番目の配列の要素ということです。

最後に、このインデックス番号を使って、表の配列(values1)から明智光秀のデータを呼び出しています。

  // 「4」のインデックス番号を使って配列(values1)の該当データを取り出しログに出力する
  Logger.log(values1[index]) // [明智光秀, 1組, 411.0]

このようにすることで、特定の列をキーにして表の中からデータを取り出すことが出来ます。

まとめ

特定の列をキーとしてデータを取り出す方法を紹介しました!いろいろなメソッドを組み合わせて、やりたい処理を実行できるように組み立てていくということが見えてきたと思います!