🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

date

dateは、date型や日付に関する関数や処理についてのタグです

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Q&A

解決済

1回答

2916閲覧

特定の列にデータが入力された際、別に列にタイムスタンプを押したい

yuki0137

総合スコア5

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

date

dateは、date型や日付に関する関数や処理についてのタグです

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

0グッド

0クリップ

投稿2021/01/08 02:24

前提・実現したいこと

特定の列にデータが入力された際にタイムスタンプが押されるようにしたいです。
具体的にはV列以降に他システムからDLしたデータを貼り付けると、
A列に貼り付けた日付を入力するようGASを組んでいます。

発生している問題・エラーメッセージ

V列のデータが入っている最終行を認識させ、
A列にタイムスタンプを押すようfor文を組んだつもりが、
スプシの最終行までタイムスタンプが押されてしまいます。

該当のソースコード

function setTimeStamp() {

// 定義
const TARGET_COLUMN = 'a'; // タイムスタンプを押す列(A列)

// シート定義
var ss = SpreadsheetApp.getActiveSpreadsheet(); // 編集したスプレッドシート
var sheet = ss.getActiveSheet(); // 編集したシート(タブ)
var range = sheet.getActiveRange(); // 編集した範囲
var col = range.getColumnIndex(); // 編集した列
var row = range.getRowIndex(); // 編集した行
var lastRow = sheet.getRange('V:V').getLastRow(); // V列最終行

// 現在時刻
var currentTime = Utilities.formatDate(new Date(), 'Asia/Tokyo', 'yyyy/MM/dd');

if(col == 22) { // 編集した列がステータス列(22列目)の場合
for(let i = row; i <= lastRow; i++){
// タイムスタンプを押す
ss.getRange(TARGET_COLUMN + i).setValue(currentTime);
}
}
}

試したこと

lastRowのコードを変更し、スプシの最終行からデータが入っている最終行を検索する方法
getNextDataCell(SpreadsheetApp.Direction.UP)も試してみましたが組み方が悪いのか
データが入力された先頭行にしかタイムスタンプが押されませんでした…。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

JS

1for (let i = row; i <= lastRow; i++) { 2 // タイムスタンプを押す 3 ss.getRange(TARGET_COLUMN + i).setValue(currentTime); 4}

で、最後の行までループしているからです。

JS

1ss.getRange(TARGET_COLUMN + row).setValue(currentTime);

だけでいいのでは。


(追記)

複数行のデータをまとめて貼り付けた際にも対応できるようにすることは可能でしょうか。

こんな感じでしょうか。

JS

1function onEdit(e) { 2 const TARGET_COLUMN = "A"; // タイムスタンプを押す列(A列) 3 const sheet = SpreadsheetApp.getActiveSheet(); 4 const range = e.range; 5 const currentTime = Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd"); 6 7 if (range.getColumn() <= 22 && 22 <= range.getLastColumn()) { 8 for (let row = range.getRow(); row <= range.getLastRow(); row++) { 9 sheet.getRange(TARGET_COLUMN + row).setValue(currentTime); 10 } 11 } 12}

投稿2021/01/08 04:31

編集2021/01/08 15:39
draq

総合スコア2577

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yuki0137

2021/01/08 05:26 編集

ご回答ありがとうございます。 修正しましたが、データが入っている先頭行にしかタイムスタンプが押されませんでした…。 具体的にはV10セル~V20セルにデータを貼り付けた際、タイムスタンプが押されるのがA10セルのみ、という具合です。 複数行のデータをまとめて貼り付けた際にも対応できるようにすることは可能でしょうか。
draq

2021/01/08 15:32

複数行まとめて貼り付ける場合は、Range.getRow()で最初の行を、Range.getLastRow()で最後の行を取得して処理してください。
yuki0137

2021/01/12 02:50

ありがとうございます!データを貼り付けた行にのみタイムスタンプが押されました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問