web-dev-qa-db-ja.com

セルが入力されたときの自動タイムスタンプ

非常に単純なExcelの数式があり、再帰的な繰り返しを制限できるため、機能します。私はスクリプトにあまり精通していませんが、これがそれであり、機能します。

=IF(D24="P",IF(E24="",DateStamp,E24),IF(D24="F",IF(E24="",DateStamp,E24),""))

合格/不合格のテストシートであり、誰かがテストに合格または不合格になったときにタイムスタンプを追加します。さらに数人を追加しました。ドキュメントをGoogleアプリに移動して、複数の人が同時に作業できるようにしたいと思います。

私が遭遇した唯一の問題は、これが引き起こす循環参照です。 Excelでは、オプションの反復回数を制限できますが、この機能はもうありません。どんな助けでも素晴らしいでしょう。

編集:私が試したこと。私は、同僚が作成したVBAスクリプトを入力する方法を見つけようとしました。私はスクリプトが苦手なので、これをGoogleAppsスクリプトにすることができません。

VBAスクリプト:

    Private Sub Worksheet_Change(ByVal Target As Range)

If Target.Column = 4 Then
If Cells(Target.Row, 5).Value = "" Then

Cells(Target.Row, 5).Value = Now
End If
Else
End If


End Sub

理論的には、タイムスタンプが付いたセルをコピーするスクリプトを作成してから、「特殊な貼り付け」を試み、必要なセルに値を貼り付けようとしました。これは、Google AppsScriptingで特別に貼り付ける方法が見つからなかった場合を除いて機能します。

助けてくれてありがとう/編集

7
jtown84

Stackoverflowは、プログラミングに関連する質問をする場所です。あなたが実際に取り組んでいること。他の人に開発を依頼しているわけではありません。つまり、AppsScriptコードの試用をまだ開始していません。 チュートリアル および ガイド を読むことをお勧めします。始めるのは本当に簡単です。

とにかく、あなたが始めるのを助けるために、私はあなたが言ったすべてを落とし、質問のタイトルに固執します:「セルが埋められたときの自動タイムスタンプ」

すべてをappsスクリプトで実行し、数式を完全に削除することをお勧めします。

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if( r.getColumn() == 4 ) { //checks the column
      var nextCell = r.offset(0, 1);
      if( nextCell.getValue() === '' ) //is empty?
        nextCell.setValue(new Date());
    }
  }
}

このコードは、私があなたから理解したことを実行します。つまり、列Dで何かが編集され、列Eが空の場合、現在の日付をEに追加します。

25

上記のコードに追加するだけです同じシートの複数列の自動スタンプの場合

function onEdit() {
  var s = SpreadsheetApp.getActiveSheet();
  if( s.getName() == "Sheet1" ) { //checks that we're on the correct sheet
    var r = s.getActiveCell();
    if( r.getColumn() == 5 ) { //checks the column
      var nextCell = r.offset(0, 1);
      //if( nextCell.getValue() !== '' ) //is empty?
      nextCell.setValue(new Date());
    }

    if( r.getColumn() == 7 ) { //checks the column
      var nextCell = r.offset(0, 1);
      //if( nextCell.getValue() !== '' ) //is empty?
      nextCell.setValue(new Date());
    }

    if( r.getColumn() == 9 ) { //checks the column
      var nextCell = r.offset(0, 1);
      //if( nextCell.getValue() !== '' ) //is empty?
      nextCell.setValue(new Date());
    }
  }
}
1
Vinit Vinit

セルが再度変更された場合に更新する場合は、この行を削除してください

if( nextCell.getValue() !== '' ) //is empty?

ちなみに、日付はどのようにieにフォーマットできますか。デフォルトのdd/mm/yyyy hh:MM:ss形式の代わりにdd/mm/yyyy