web-dev-qa-db-ja.com

新しい行を自動的に挿入し、最後の行の関数/式を保持する方法は?

このような関数/式を持つセルを含むテーブルがあります:

enter image description here

新しい行を作成し、最後に使用した行の関数/式をコピーするスクリプトが必要です。 新しい行を作成するが、関数/式をコピーしないこのスクリプト を見つけました。手動で選択してコピーすることなく、Google Apps Scriptでこのフォーマットコピータスクを実装するにはどうすればよいですか?

以下のコードを使用して、式も通常の値としてコピーします。スプレッドシートメニューから[ツール]を選択して、コードを追加します。次に、スクリプトエディターを選択し、コードを追加します。必ず「バグ」ボタンを押して、スクリプトを認証してください。

コード

// global 
var ss = SpreadsheetApp.getActive();

function onOpen() {
  var menu = [{name:"Add New Last Row", functionName:"addRow"}];
  ss.addMenu("Extra", menu);
}

function addRow() {
  var sh = ss.getActiveSheet(), lRow = sh.getLastRow(); 
  var lCol = sh.getLastColumn(), range = sh.getRange(lRow,1,1,lCol);
  sh.insertRowsAfter(lRow, 1);
  range.copyTo(sh.getRange(lRow+1, 1, 1, lCol), {contentsOnly:false});
}

リマーク

contentOnlyfalseに設定すると、標準コピーが生成されます。 trueに設定すると、値のみが貼り付けられます。あなたが見つけたスクリプト例は、値を貼り付けるだけではありません.....

サンプルファイルを作成しました:数式で行を追加

19

このArrayFormulaは、スクリプトを使用せずに同じことを実行できます。 D4に入力すると、その下の空のセルに自動的に引き継がれます。

ArrayFormula(vlookup(B4:B:tax_table!$A$2:$G$8;3;true))

注:「B4:B」とは、B4から列の終わりまでのすべてのセルを見るという意味です。

一方、ArrayFormulaは自身をその下のセルにコピーします。その下のセルが空であることを確認してください。

3
user3660579

新しい行を最初(最初の行)に追加し、最初の行から数式をコピーする必要がある場合、getFormulas()およびsetFormulas()関数を使用して数式をコピーする必要があります。たとえば、スプレッドシートにヘッダーがある場合、firstRowの値を2に変更できます。

function addFirstRow() {
    var firstRow = 1;
    var sh = ss.getActiveSheet();
    var lCol = sh.getLastColumn();
    var range = sh.getRange(firstRow, 1, 1, lCol);
    var formulas = range.getFormulas();
    sh.insertRowsAfter(1, 1);
    newRange = sh.getRange(firstRow, 1, 1, lCol);
    newRange.setFormulas(formulas);
}
3
dgpro