earthpg:GAS専門のプログラミングスクール

GASでお手軽!数値を四捨五入する便利スクリプトガイド

GASを使って数値を四捨五入したいんだけど、どうしたらいいんだろう?スプレッドシートで手作業するより簡単だといいなぁ…
猫男
猫男
catman
catman
よし、catmanがGASで数値を四捨五入する便利な方法を教えてやろう。まず基本から始めるぞ!

GASで数値を四捨五入する基本

数値を四捨五入する方法について、GASでは通常のJavaScriptと同様にMath.round()関数を使います。

基本の形はこちら:

function roundNumber(num) {
  return Math.round(num);
}

Logger.log(roundNumber(3.6)); // 4
Logger.log(roundNumber(5.2)); // 5

Math.round()を使えば、小数点以下を丸めて最も近い整数にできます。

異なる桁で数値を四捨五入する

小数点第n位で四捨五入したいときは、少し工夫が必要です。このケースでは、小数点をずらしてから四捨五入し、また元に戻します。

function roundToN(num, n) {
  var factor = Math.pow(10, n);
  return Math.round(num * factor) / factor;
}

Logger.log(roundToN(3.14159, 2)); // 3.14
Logger.log(roundToN(5.6789, 1)); // 5.7

Math.pow(10, n)が乗数を利用して小数点を移動させてから、元の位置に戻します。

すごい!nの値を変えるだけで任意の小数点以下の桁で四捨五入できるんですね!
猫男
猫男

GASとスプレッドシートで数値を操作する

スプレッドシート内のデータをGASで処理して四捨五入することもできます。

function roundSpreadsheetValues() {
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var range = sheet.getDataRange();
  var values = range.getValues();

  for (var i = 0; i < values.length; i++) {
    for (var j = 0; j < values[i].length; j++) {
      values[i][j] = Math.round(values[i][j]);
    }
  }

  range.setValues(values);
}

SpreadsheetApp.getActiveSpreadsheet()でスプレッドシートにアクセスし、getDataRange()でその範囲のデータを取得しています。そして二重ループを通じて各セルの値を四捨五入しています。

catman
catman
スプレッドシート操作も簡単さ。この方法で数値を簡単に丸めることができるだろう。四捨五入した値はスクリプトで一気に処理、作業がぐっと効率化する!

練習問題:GASで四捨五入してみよう

次の問題に挑戦してください:
任意の数値リストを用意し、指定の桁数で四捨五入し、その結果をスプレッドシートの別シートに書き出すスクリプトを書きましょう。

解答と解説

解答はこちら:

function roundAndCopyToNewSheet(numbers, n) {
  var roundedNumbers = numbers.map(function(num) {
    var factor = Math.pow(10, n);
    return Math.round(num * factor) / factor;
  });

  var sheet = SpreadsheetApp.getActiveSpreadsheet().insertSheet('RoundedResults');
  var range = sheet.getRange(1, 1, roundedNumbers.length, 1);
  range.setValues(roundedNumbers.map(function(num) {
    return [num];
  }));
}

解説:
mapを用いて数値リストを効率的に新しいリストに変換し、四捨五入しています。
SpreadsheetApp.getActiveSpreadsheet().insertSheet()で新シートを作成し、地上のデータを書き込みます。
setValuesで多次元配列としてスプレッドシートにデータを設定しています。