【GAS】配列の列抽出の方法
最近、Google Apps Script(GAS)を使って趣味程度の簡単な自動化システムを作ることにはまっています。その過程で、2次元配列の特定の列データを抽出する方法を調べました。いくつか方法はあると思いますが、個人的にわかりやすかった方法を解説します。
列抽出する方法
例題として、スプレッドシートから下記のような表データを抽出し、その後スクリプトの中で、特定のデータ(アルファベット列)を抽出するというシチュエーションにします。
コードは記事の最後に載せています。

次に、スクリプトです。
17行目まではシートから表データを抽出し、aという変数に格納する部分です。簡単に解説しますと、まず、アクティブシートを読み込みます(3行目)。次に、データの先頭行と先頭列を指定しています(6,7行目)。さらに、データの最後の行と列を読み込みデータの行数と列数を認識しています(〜11行目)。
その後、先頭行と先頭列及びデータの行数と列数からデータを変数aに格納しています。
そして、次は配列aからアルファベット列のみを抽出する部分です(23行目)。
配列のmapメソッドを使用します。このメソッドは下記で説明されています。
Spreadsheet Dev - The Array method map() in Apps Script
This function will be executed once for every element in the array and a new array containing the output of these executions will be returned.
配列aに対して、a.map(elm => [elm[1]])とすることで、元の配列の2列目の要素のみを抽出して新たな配列を生成できるみたいです。1番目の列の場合はelm[0]にすれば良いです。
console.logで確認すると、アルファベット列(2番目の列)のみの配列が生成できていることが確認できます。

ちなみにa.map(elm => [elm[1], elm[2]])とすることで、2列目と3列目を抽出した配列を生成することができます。
生成される配列:
[ [ 'アルファベット', 'ひらがな' ],
[ 'A', 'あ' ],
[ 'B', 'い' ],
[ 'C', 'う' ],
[ 'D', 'え' ],
[ 'E', 'お' ] ]
簡単に列の順番を変えることもできそう!
以上が2次元配列の特定の列データのみを抽出するやり方でした。
ソースコード全文:
function myFunction() { //アクティブなシートを取得 let activeSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("test"); // 「test」はシート名; //シートからデータを読み込み2次元配列に格納 let startRow = 2; //先頭行 let startCol = 2; //先頭列 let numRow = activeSheet.getRange(startRow, startCol) .getNextDataCell(SpreadsheetApp.Direction.DOWN).getRow() - (startRow - 1); //行数 let numCol = activeSheet.getRange(startRow, startCol) .getNextDataCell(SpreadsheetApp.Direction.NEXT).getColumn() - (startCol - 1); //列数 let a = activeSheet.getRange( startRow, startCol, numRow, numCol ).getValues(); //データ表示 console.log("データ:\n",a); //2列目を抽出 a = a.map(elm => [elm[1]]); //データ表示 console.log("抽出データ:\n",a); }