4

範囲ではなく単一の参照セルを渡し、そのセルの列番号を返す関数が必要です。

function lastRealDate(v) {
  var thisColumn = v.getColumn();
  return thisColumn;
}​

しかし、どうやら私はそのようにそれを行うことはできません。誰かが私に正しい方法を教えてもらえますか?スプレッドシートのスクリプト作成は非常に新しいです。

error: TypeError: Cannot find function getColumn in object 

わかりました、多分私はもっと詳細を与える必要があります。それぞれ次の列を持つジョブのリストがあります。

プロジェクト名| ステータス| 完了日| 残り日数
#1 | 準備完了| 12/5/12 | 0.14ジョブ#2 | ホールド| 12/5/12 | 0.25ジョブ#3 | 準備完了| 12/6/12 | 1.0

完了日は次のように計算されます...

if(残り日数> 0、WORKDAY(前のプロジェクトの完了日、残り日数)これは文字通り:= if(J5> 0、WORKDAY(G4、J5、vars!$ A $ 2:$ A $ 27)、 "")

これはすべて正常に機能します。しかし、今はステータス列を確認したいと思います。前のジョブのステータスが保留中の場合は、そのジョブをスキップして、前の次のジョブを確認します。

したがって、基本的に、保留になっていない次のジョブを見つけてその完了日を取得するまで、セルをループする必要がありました。

私はこのようなことを考えていました:

= if(J5> 0、WORKDAY(custom_function(G4)、J5、vars!$ A $ 2:$ A $ 27)、 "")

そのシナリオについて何か考えはありますか?

4

2 に答える 2

2

残念ながら、それは不可能です。「メタ」カスタム関数を作成することはできません。関数に渡されるパラメーターvは、それが1つのセル、1つの行または列、あるいはシート全体であるかどうかに関係なく、常にセルの値になり、「参照」や範囲オブジェクトではありません。

良いことは、それを行うための組み込み関数がすでにあることです=COLUMN(C1)。また、カスタム関数に代わる組み込み関数がある場合は、組み込み関数を使用する必要があります。さて、私はさらに進んで言います:カスタム関数を決して使用しないでください。計算を行うためのスクリプトが必要な場合は、別の呼び出し方法、つまり、カスタムメニュー、画像の「ボタン」、onEditトリガーなどを使用します。特に今あなたが学んでいるので、カスタム関数を全く避けてください。彼らはそれだけの価値はありません。

于 2012-12-05T15:35:53.717 に答える
1

+Henrique が、カスタム関数に渡される情報についての一般的な質問に答えました。


編集の特定のユース ケースに応じて、ネイティブ関数を含む数式は次のようになります (列 G の日付が昇順で、ステータスが列 F であると仮定します)。

=IF(J5>0;WORKDAY(MAX(FILTER(G$2:G4;F$2:F4<>"HOLD"));J5;vars!$A$2:$A$27);"")

于 2012-12-06T21:08:25.447 に答える