GoogleAppsScript
gas
spreadsheet
6
どのような問題がありますか?

この記事は最終更新日から1年以上が経過しています。

投稿日

更新日

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

概要

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

新規登録して、もっと便利にQiitaを使ってみよう

  1. あなたにマッチした記事をお届けします
  2. 便利な情報をあとで効率的に読み返せます
ログインすると使える機能について
SONER-O

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
新規登録
すでにアカウントを持っている方はログイン
記事投稿イベント開催中
PHP強化月間~開発する上で知っておくべき知見を共有しよう~
~
機械学習を発展させるための知識を発信しよう!
~
6
どのような問題がありますか?
新規登録して、Qiitaをもっと便利に使ってみませんか

この機能を利用するにはログインする必要があります。ログインするとさらに下記の機能が使えます。

  1. ユーザーやタグのフォロー機能であなたにマッチした記事をお届け
  2. ストック機能で便利な情報を後から効率的に読み返せる
新規登録ログイン
ストックするカテゴリー