LoginSignup
2
6

More than 3 years have passed since last update.

【GAS】指定範囲のセルから数式と値を両方取得する(getValues()&getFormulas())

Last updated at Posted at 2020-01-15

概要

getValues()では値しか取得できません。
getFormulas()では数式しか取得できません。
数式と値が両方取れる関数が見つからなかったので作ってみました。
需要があるのかは謎です。
もっといい方法があるよ!という場合はコメントよろしくお願いします。

以下サンプル

ソースコード

main.gs
/***********
指定範囲のセルから数式と値を取得する関数
@param:セル範囲
@return:2次元配列
************/
function getValuesAndFormulas(range){
  //getValues()でまずは値だけ取得
  var valuesAndFomulas = range.getValues();
  Logger.log("valuesAndFomulas:%s", valuesAndFomulas);

  //getFormulas()で数式を取得
  var tempFormulas = range.getFormulas();
  Logger.log("tempFormulas:%s", tempFormulas);

  //getValues()で取得した配列とgetFormulas()で取得した配列を突合
  for(column = 0; column < valuesAndFomulas[0].length; column++){
    for(row = 0; row < valuesAndFomulas.length; row++){
      //getFormulas()で取得した数式の入っている要素を代入して更新
      if(tempFormulas[row][column].length != 0){
        //空ではなく数式が入っている
        valuesAndFomulas[row][column] = tempFormulas[row][column];
      }else{
        //空の場合
        ;//何もしない
      }
    }
  }
  Logger.log("valuesAndFomulas:%s", valuesAndFomulas);
  return valuesAndFomulas;
}

function main() {
  //紐づいているスプレッドシートにアクセス
  var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
  Logger.log(spreadsheet.getName());

  //アクティブなシートを取得
  var sheet = spreadsheet.getActiveSheet();

  //B3:D7のセル範囲を指定
  var range = spreadsheet.getRangeByName('B3:D7');
  //var range = sheet.getRange(3, 2, 5, 3);//こちらでも可

  //チェック
  var checkGetValues = range.getValues();
  Logger.log("checkGetValues:%s", checkGetValues);

  var checkGetFormulas = range.getFormulas();
  Logger.log("checkGetValues:%s", checkGetFormulas);

  var checkGetValuesAndGetFormulas = getValuesAndFormulas(range);
  Logger.log("checkGetValuesAndGetFormulas:%s", checkGetValuesAndGetFormulas);

  //書き込み
  spreadsheet.getRangeByName('F3:H7').setValues(checkGetValues);
  spreadsheet.getRangeByName('B10:D14').setValues(checkGetFormulas);
  spreadsheet.getRangeByName('F10:H14').setValues(checkGetValuesAndGetFormulas);
}

実行結果

スクリーンショット 2020-01-15 22.08.09.png

ログ

スクリーンショット 2020-01-15 22.10.38.png

2
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
6