2013-07-13 23 views
5

セル内に次の関数があります。それが動作しますGoogleスプレッドシートのカスタム関数は、スプレッドシート関数で作成されています

=INT((TODAY()-D19)/7)&" weeks, "&(TODAY()-D19-(INT((TODAY()-D19)/7)*7))&" days" 

を年齢を計算するよりも、他のセルから日付を読み取り、「3週5日」の形式で変換します。

今、私は1つの単純な関数にこの長い文字列を置換したいと思います:

=AGEINWEEKS(D19) 

私はそれをどのように行うことができますか?

私はすでに、スクリプトエディタで

function ageInWeeks(from_date) { 
    return SpreadsheetApp.getActiveSheet().getRange("D16").setFormula('=ROUND((TODAY()-D16)/7)&" weeks, "&(TODAY()-D16-(ROUND((TODAY()-D16)/7)*7))&" days"'); 
} 

をこのスクリプトを記述しようとしたが、それは誤り

error: You do not have permission to call setFormula (line 3, file "Code")

を返し事前にありがとうございます!

よろしく、 Tomaž

答えて

7

スプレッドシート関数と同じ結果を与えるカスタム関数を作成する場合は、式を設定するのではなく、計算を実行する方法でGoogle Apps Scriptを使用する必要がありますスプレッドシート(​​Sergeが指摘したように、許可されていないため動作しません)に挿入します。

(また、単に将来の読者に明確にすることは、Google Appsスクリプトとそのカスタム関数は、Googleスプレッドシートの数式を使って計算を実行することはできません。彼らは、JavaScriptの言語での計算を行う。一方、スクリプト、setFormulas 缶経由スプレッドシートの数式をセルに書き込むと、スプレッドシートの数式が計算を実行しますが、スクリプトがカスタム関数として使用されている場合(つまり、 =記号)であるがの場合のみスクリプトは、メニュー項目やトリガーなどの別の手段から呼び出されます。スプレッドシートの編集や。タイマー)

ので、カスタム関数にjavascriptを書くことができますが、週、日を計算すると、このようなスクリプトは次のようになります。これは、D19の場合を除き、任意のセルにスプレッドシートに入れることができ

function ageInWeeks(date) { 
var mil = new Date() - new Date(date).getTime() 
var seconds = (mil/1000) | 0; 
mil -= seconds * 1000; 

var minutes = (seconds/60) | 0; 
seconds -= minutes * 60; 

var hours = (minutes/60) | 0; 
minutes -= hours * 60; 

var days = (hours/24) | 0; 
hours -= days * 24; 

var weeks = (days/7) | 0; 
days -= weeks * 7; 
return weeks +' wks, ' + days + ' days' 

} 

=ageInWeeks(D19) 

ここで、セルD19には過去の日付が含まれています。

関数は `[「」、「」、「」、「」、「値」]のようなものを返す場合

+0

徹底的な回答ありがとうございます!コードは完全に機能します。 – tomazzlender

2

documentation :からカスタム関数は値を返しますが、彼らは、彼らがしている細胞外の値を設定することはできません。ほとんどの状況では、セルA1のカスタム関数は、セルA5を変更することはできません。

tipycalユースケースについて説明すると、別のアプローチが示唆される可能性があります。

+0

(カスタム関数は、元の表計算式よりも遅くなる可能性があることに注意してください)'、 * A5 *には「値」が入力されます –

関連する問題