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


24

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

ここに画像の説明を入力してください

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


私の前の行の式が= HTTPResponse(C4)の場合、同じ式をコピーできますが、新しい行の新しいセル番号はどうすればよいですか?
user1788736

回答:


20

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

コード

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

リマーク

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

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


3

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

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

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

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


3

一番上(最初の行)に新しい行を追加し、最初の一番上の行から数式をコピーする必要がある場合は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);
}

1
こんにちはDenis、私が作成した投稿を参照していますか?スクリプトを確認するだけで、まだ機能しています。よろしくヤコブ1月
ヤコブ1月Tuinstra

こんにちは@JacobJanTuinstra、はい、あなたは正しいです。私は実際に新しい行を上に追加して同じ行の数式を保持しようとしていましたが、スクリプトは新しく作成された空の行からデータをコピーしようとしたため機能しませんでした。これを反映するために回答を更新します。ありがとう
-dgpro

こんにちは@DenGordo!これをありがとう。数式ではなく、移動する値がある場合、これをどのように変更しますか?ありがとう!
ドリューデービッド

ああ、PS-どのタブを扱っているのですか?再度、感謝します。
ドリューデービッド

-2

この問題を解決するためsetFormula(range)に、たとえばを使用しました。

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];

var cell = sheet.getRange("B5");
 cell.setFormula("=SUM(B3:B4)");

数式は行インデックスに応じて自動的に増加します。

最後に、onUpdateまたはonEditトリガーを追加できます。


-1; コードはどのように誘発されますか?合計を追加していますが、物理的に行を追加する必要があります。onUpdateトリガーは存在しません。
ジェイコブヤントゥインストラ14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.