Google Apps Script(GAS)で、スプレッドシートの特定列の最大値・最小値を取得する方法です。
サンプルとして下記のような表を想定して説明します。
連番の作成や、期間データの最大値、最小値の取得などで使用する場合があると思います。
最大値・最小値の取得手順
コンテンツ
1)特定列のセルデータを取得
2)配列内を降順・昇順に並べ替え
3)配列の先頭要素を取得
特定列のセルデータを取得し配列として保持
特定列のセルデータの取得には、getRangeメソッドをもちいます。
var sheet = SpreadsheetApp.getActiveSheet(); //アクティブのシート
var row = 1; //開始行
var col = 1; //開始列
var arrayData = sheet.getRange(row,col,sheet.getLastRow()).getValues(); //列Aのセルを取得
配列内を降順・昇順に並べ替え
最大値、最小値を取得するために、並べ替えを行います。
Google Apps Scriptの配列は参照渡しのため、並べ替え用の配列をそれぞれ定義しています。
function main() {
var col = 1;
var row = 1;
var sheet = SpreadsheetApp.getActiveSheet();
//昇順用配列
var arrayDataAsc = sheet.getRange(row, col,sheet.getLastRow()).getValues();
//降順用配列
var arrayDataDesc = sheet.getRange(row, col,sheet.getLastRow()).getValues();
//昇順に並べ替え
var arraySortedAsc = arrayDataAsc.sort(function(a,b){return a-b});
//降順に並べ替え
var arraySortedDesc = arrayDataDesc.sort(function(a,b){return b-a});
}
配列のもつ要素を数値のみにフィルタ
上記の状態では、セルの値に含まれる見出し文字や空白などが含まれるので、数値に限定する場合は、数値(Number)でフィルタを実行します。
function main() {
var col = 1;
var row = 1;
var sheet = SpreadsheetApp.getActiveSheet();
//昇順用配列
var arrayDataAsc = sheet.getRange(row, col,sheet.getLastRow()).getValues();
//降順用配列
var arrayDataDesc = sheet.getRange(row, col,sheet.getLastRow()).getValues();
//数値(Number)フィルタ
var arrayDataAsc = arrayDataAsc.filter(Number);
var arrayDataDesc = arrayDataAsc.filter(Number);
//昇順に並べ替え
var arraySortedAsc = arrayDataAsc.sort(function(a,b){return a-b});
//降順に並べ替え
var arraySortedDesc = arrayDataDesc.sort(function(a,b){return b-a});
}
配列の先頭要素を取得
昇順、降順で並べ替えた配列の先頭要素を取得し、最小値、最大値を取得します。
function main() {
var col = 1;
var row = 1;
var sheet = SpreadsheetApp.getActiveSheet();
//昇順用配列
var arrayDataAsc = sheet.getRange(row, col,sheet.getLastRow()).getValues();
//降順用配列
var arrayDataDesc = sheet.getRange(row, col,sheet.getLastRow()).getValues();
//数値(Number)フィルタ
var arrayDataAsc = arrayDataAsc.filter(Number);
var arrayDataDesc = arrayDataAsc.filter(Number);
//昇順に並べ替え
var arraySortedAsc = arrayDataAsc.sort(function(a,b){return a-b});
//降順に並べ替え
var arraySortedDesc = arrayDataDesc.sort(function(a,b){return b-a});
//昇順に並べ替えた配列の先頭 = 最小値
var min = arraySortedAsc[0];
//降順に並べ替えた配列の先頭 = 最大値
var min = arraySortedDesc[0];
}
まとめ
表データの最大値、最小値を把握するためや、連番を自動で生成するなどに応用ができます。
配列をソートする際に、元配列をそのままもちいると、配列の中身が同じ(参照渡し)になりますのでそこが注意です。
//NG(参照渡しのため、arraySortedAsc とarraySortedDescが同じ内容になる。両方とも降順で並べ替えの配列)
var arrayData = sheet.getRange(row, col,sheet.getLastRow()).getValues();
//昇順に並べ替え
var arraySortedAsc = arrayData.sort(function(a,b){return a-b});
//降順に並べ替え
var arraySortedDesc = arrayData.sort(function(a,b){return b-a});