【GAS】Google Apps Scriptで、列内の最大値・最小値を取得する方法【スプレッドシート】

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});

この記事のご感想やコメントはこちら

メールアドレスが公開されることはありません。 が付いている欄は必須項目です