14

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

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

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

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

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

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

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

ヘルプ/編集をありがとう

4

7 に答える 7

37

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

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

すべてをappsscriptで実行し、数式を完全に削除することをお勧めします。たとえば、

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ます。

于 2012-07-13T04:13:02.060 に答える
1

同じシートの複数列AutoStampの上記のコードに追加するだけ

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());
    }
  }
}
于 2016-06-20T19:08:38.383 に答える
0

AppsScriptを使用する必要があります。例を使用して説明します。

function onEdit(e) {
var row = e.range.getRow();
if (row > 1 && e.source.getActiveSheet().getName() === "Sheet1") {
    e.source.getActiveSheet().getRange(row, 14).setValue(new Date());
} else {
    if ((row > 1 && e.source.getActiveSheet().getName() === "Sheet2") || (row > 1 && e.source.getActiveSheet().getName() === "Sheet3")) {
        e.source.getActiveSheet().getRange(row, 6).setValue(new Date());
    }}}

まず、どのシートが編集されているかを確認します。sheet1の場合、そのシートのすべての行の14番目の列(getRange(row、14))を取得し、何かが編集されるたびに(edit(e) ) 、その14番目にタイムスタンプ(setValue(new Date()) )を追加します桁。同様に、それが別のシート、つまりSheet2、Sheet3、またはその他の名前である場合は、要件に応じてタイムスタンプに別の列を選択できます。また、if((row> 1)条件が追加されたため、編集時にタイムスタンプが最初の行に追加されません。これは通常、見出しです。

次に、セルの範囲を取得し、要件に従ってそれらを使用することを選択します。getRange()のより良いアイデアについては、この質問を参照してください。

于 2021-04-02T18:39:37.063 に答える
-1

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

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

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

于 2017-03-17T23:52:33.750 に答える
-3

実際、この場合、スクリプトを作成する必要はありません。グーグル(または誰か)はすでにそれをしました。Googleスプレッドシートで、[挿入]-> [スクリプト]に移動し、[時間]で検索します。あなたが望むことをする2つの既製のスクリプトがあります。「セルの最終変更日」は完全に機能することがわかりました。それを選択し、「インストール」ボタンをクリックします。列を再フォーマットして、日付、日付+時刻などを表示できます。また、列に日付を手動でコーディングしたり、以前に追跡していた場合は別の列から日付を移動したりすることもできます。日付は設定したままになります。ただし、行のセルを更新すると、タイムスタンプが更新されます。

于 2013-05-09T17:23:50.457 に答える
-4

タイムスタンプにHH:MM:SSを含めるように設定しましたが、1分以内にスタンプを4回テストすると、タイムスタンプのMMとして03,14,11,07が変動します。

于 2018-02-02T07:22:44.840 に答える
-9

それよりずっと簡単です!=今

また;

=今日

必要なものに応じて

于 2016-01-25T14:21:38.120 に答える