【GAS】二次元配列の操作まとめ|列の並び替え・削除・フィルター処理をコード付きで解説
GAS(Google Apps Script)でスプレッドシートのデータを取得して処理する際、二次元配列の操作は頻出です。本記事ではgetValues()で取得した配列に対して、列の並び替え・削除・条件フィルタリングを行う実用的なコードを紹介します。
目次
前提:スプレッドシートから二次元配列を取得する
以下のような表をGASで取得する例を使って説明します。

const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getSheetByName("sheet1");
// 2行目から5行・5列のデータを二次元配列として取得
let arr = sh.getRange(2, 1, 5, 5).getValues();
// arr[行インデックス][列インデックス] でアクセス(0始まり)
配列の列の順番を変更する
map()を使って各行の列を指定した順番に並べ替えます。elm[インデックス]で列番号(0始まり)を指定します。
// 列の入れ替え: 元の並びを [0,1,2,3,4] から [0,1,4,2,3] に変更
arr = arr.map(elm => [elm[0], elm[1], elm[4], elm[2], elm[3]]);
完全なサンプルコードです。
function sortColumns() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sh = ss.getSheetByName("sheet1");
// 表のデータ取得
let arr = sh.getRange(2, 1, 5, 5).getValues();
// 列の入れ替え(0始まりのインデックスで指定)
arr = arr.map(elm => [elm[0], elm[1], elm[4], elm[2], elm[3]]);
// データの書き込み
sh.getRange(12, 1, arr.length, arr[0].length).setValues(arr);
}

必要な列だけを抽出する(不要な列を削除)
map()で使用する列のインデックスだけを指定することで、不要な列を除外できます。
// 2列目(インデックス1)と5列目(インデックス4)だけを残す
arr = arr.map(elm => [elm[1], elm[4]]);

条件にあったデータを抽出する(フィルター)
filter()を使って条件に合う行だけを抽出します。
単一条件でフィルタリング
// 3列目(インデックス2)の数値が20以上の行だけ取得
arr = arr.filter(elm => elm[2] > 20);

複数条件でフィルタリング(AND条件)
// 3列目が20以上 かつ 5列目が「男」の行だけ取得
arr = arr.filter(elm => (elm[2] > 20 && elm[4] === "男"));

map・filterを組み合わせる
フィルタリングと列の並び替えを組み合わせて使うこともできます。
// 20歳以上の男性データのみ取得し、必要な列(名前・年齢)だけに絞る
arr = arr
.filter(elm => elm[2] > 20 && elm[4] === "男")
.map(elm => [elm[0], elm[2]]);
まとめ
GASでの二次元配列操作のポイントをまとめます。
- 列の並び替え・削除:
arr.map(elm => [elm[インデックス], ...]) - 行のフィルタリング:
arr.filter(elm => 条件) - 組み合わせ:
filter()→map()の順でチェーンできる - 列のインデックスは0始まりであることに注意







ディスカッション
コメント一覧
まだ、コメントがありません