このような関数/式を持つセルを含むテーブルがあります:
新しい行を作成し、最後に使用した行の関数/式をコピーするスクリプトが必要です。新しい行を作成するこのスクリプトを見つけましたが、functions / formulasをコピーしません。手動で選択してコピーすることなく、Google Apps Scriptでこのフォーマットコピータスクを実装するにはどうすればよいですか?
このような関数/式を持つセルを含むテーブルがあります:
新しい行を作成し、最後に使用した行の関数/式をコピーするスクリプトが必要です。新しい行を作成するこのスクリプトを見つけましたが、functions / formulasをコピーしません。手動で選択してコピーすることなく、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});
}
contentOnlyをに設定するfalse
と、標準コピーが生成されます。に設定するとtrue
、値のみが貼り付けられます。あなたが見つけたスクリプト例は、値を貼り付けるだけではありません.....
サンプルファイルを作成しました:式で行を追加
このArrayFormulaは、スクリプトを使用せずに同じことを実行できます。D4に入力すると、その下の空のセルに自動的に引き継がれます。
ArrayFormula(vlookup(B4:B:tax_table!$A$2:$G$8;3;true))
注:「B4:B」とは、B4から列の終わりまでのすべてのセルを見るという意味です。
一方、ArrayFormulaは自身をその下のセルにコピーします。その下のセルが空であることを確認してください。
一番上(最初の行)に新しい行を追加し、最初の一番上の行から数式をコピーする必要がある場合は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);
}
この問題を解決するためsetFormula(range)
に、たとえばを使用しました。
var ss = SpreadsheetApp.getActiveSpreadsheet();
var sheet = ss.getSheets()[0];
var cell = sheet.getRange("B5");
cell.setFormula("=SUM(B3:B4)");
数式は行インデックスに応じて自動的に増加します。
最後に、onUpdateまたはonEditトリガーを追加できます。
onUpdate
トリガーは存在しません。