前提・実現したいこと
Google Apps Scriptを勉強中の者です。
Googleスプレッドシートを複数名で共有して在庫の管理などを行っているのですが、
最後に更新した日時が変更履歴を参照しなくても、スプレッドシート上に表示されるようにしたいと思い、
ネット上のコードを参考にして下記のようなコードを作成しました。
【コード】
function onEdit(e){
//今変更されたシート名を取得
var edit_sheet_name = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetName();
Logger.log(edit_sheet_name);
switch (edit_sheet_name){
case 'シート1':
onEdit1();
break;
case 'シート2': onEdit2(); break;
}
}
// シートに変更があった時に実行する関数
function onEdit1() {
// 変更のあったシート
var ss = SpreadsheetApp.getActive().getSheetByName("シート1");
var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得
var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得
var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得
var updateRange = sheet.getRange('O' + currentRow); //どの列に更新日時を挿入したいか。
Logger.log(updateRange); //更新日の記入
if(currentRow > 1 && currentCol < 14) { //A列目~M列目までの変更を参照とする
if(currentCell) {
updateRange.setValue(new Date());
}
}
}
function onEdit2() {
// 変更のあったシート
var ss = SpreadsheetApp.getActive().getSheetByName("シート2");
var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得
var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得
var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得
var updateRange = sheet.getRange('O' + currentRow); //どの列に更新日時を挿入したいか。
Logger.log(updateRange); //更新日の記入
if(currentRow > 1 && currentCol < 14) { //A列目~M列目までの変更を参照とする
if(currentCell) {
updateRange.setValue(new Date());
}
}
}
【実現希望機能】
■特定のシートに関して、何らかの変更があった場合に指定のセルに更新日時を自動で入力
・特定のシート⇒「シート1」、「シート2」
・変更を読み取る範囲⇒上記各シートのA列からM列の範囲
・更新日時を入力するセル⇒変更のあったセルと同じ行のO列
参考にしたコードを自分なりに組み替えて作成したので、文法等に間違いがあるようで
思った通りの結果が返ってきません。
どうすればうまく動作するでしょうか?
発生している問題・エラーメッセージ
17:21:43 情報 シート1 17:21:44 エラー ReferenceError: sheet is not defined onEdit1 @ 無題.gs:23 onEdit @ 無題.gs:9 ### 該当のソースコード
1function onEdit(e){ 2 3 //今変更されたシート名を取得 4 var edit_sheet_name = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet().getSheetName(); 5 Logger.log(edit_sheet_name); 6 7 switch (edit_sheet_name){ 8 case 'シート1': 9 onEdit1(); 10 break; 11 12 case 'シート2': 13 onEdit2(); 14 break; 15 16 } 17} 18 19// シートに変更があった時に実行する関数 20function onEdit1() { 21 // 変更のあったシート 22 var ss = SpreadsheetApp.getActive().getSheetByName("シート1"); 23 var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得 24 var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得 25 var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得 26 var updateRange = sheet.getRange('O' + currentRow); //どの列に更新日時を挿入したいか。 27 Logger.log(updateRange); //更新日の記入 28 if(currentRow > 1 && currentCol < 14) { //A列目~M列目までの変更を参照とする 29 if(currentCell) { 30 updateRange.setValue(new Date()); 31 } 32 } 33} 34 35 36function onEdit2() { 37 // 変更のあったシート 38 var ss = SpreadsheetApp.getActive().getSheetByName("シート2"); 39 var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得 40 var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得 41 var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得 42 var updateRange = sheet.getRange('O' + currentRow); //どの列に更新日時を挿入したいか。 43 Logger.log(updateRange); //更新日の記入 44 if(currentRow > 1 && currentCol < 14) { //A列目~M列目までの変更を参照とする 45 if(currentCell) { 46 updateRange.setValue(new Date()); 47 } 48 } 49}
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/27 14:29