質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
Google Apps Script

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

Q&A

1回答

6966閲覧

編集前のセルの値を取得するgasのスクリプトが知りたいです。

退会済みユーザー

退会済みユーザー

総合スコア0

Google Apps Script

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

0グッド

0クリップ

投稿2019/06/21 14:09

編集2022/01/12 10:55

Google Apps Scriptで以下のようなスクリプトを入力しました。
logSheet.getRange(1, 7).setValue("変更前");に編集前のセルの値が入るようにしたいのですが、いろいろ探し、実践してもうまくいきません。
undefinedというコードやrangeというコードが出ており、取得できずにいます。
oldValueのコードを入れ込みはどのようにすればよろしいでしょうか?
そのほかに方法などあればご教示いただきたいです。

function onMyEdit(e) {
//Log保存用シートの名前
var logSheetName = 'log';

// スプレッドシート
var ss = SpreadsheetApp.getActiveSpreadsheet();
// スプレッドシート名
var ssName = ss.getName();

// 選択シート
var sheet = ss.getActiveSheet();
// 選択シート名
var sheetName = sheet.getName();

// Logシートなら何もしない
if (sheetName == logSheetName) {
return;
}

// 選択セル範囲
var range = sheet.getActiveRange();
// セル範囲の行番号
var rowIndex = range.getRowIndex();
// セル範囲の列番号
var colIndex = range.getColumnIndex();

// getRange(始点行, 始点列, 取得する行数, 取得する列数)
var v = sheet.getRange(rowIndex, colIndex,1,1).getValue();
//内容が空だ
if (v == '') {
v = 'Delete';
}

var oldValue = sheet.getRange(rowIndex, colIndex,1,1)

//更新者のメールアドレス
var email = Session.getActiveUser().getEmail();

//ここからLogシートに書き込み
//Log保存用シート
var logSheet = ss.getSheetByName(logSheetName);

//引数で指定した行の前の行に1行追加
logSheet.insertRowBefore(1);

logSheet.getRange(1, 1).setValue("更新日");
logSheet.getRange(1, 2).setValue("更新時間");
logSheet.getRange(1, 3).setValue("更新者");
logSheet.getRange(1, 4).setValue("シート名");
logSheet.getRange(1, 5).setValue("行番号");
logSheet.getRange(1, 6).setValue("列番号");
logSheet.getRange(1, 7).setValue("変更前");
logSheet.getRange(1, 8).setValue("更新内容");

//日付
logSheet.getRange(2, 1).setNumberFormat('yyyy/mm/dd(ddd)');
logSheet.getRange(2, 1).setValue(new Date());
//時刻
logSheet.getRange(2, 2).setNumberFormat('h:mm:ss');
logSheet.getRange(2, 2).setValue(new Date());
//更新者
logSheet.getRange(2, 3).setValue(email);
//シート名
logSheet.getRange(2, 4).setValue(sheetName);
//行番号
logSheet.getRange(2, 5).setValue(rowIndex);
//列番号
logSheet.getRange(2, 6).setValue(colIndex);
logSheet.getRange(2, 7).setValue(oldValue);
//変更セルの内容(Stringフォーマットにする)
logSheet.getRange(2, 8).setNumberFormat('@');
logSheet.getRange(2, 8).setValue(v);
}

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

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

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

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

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

gentaro

2019/06/21 14:35

なんか伝わってないみたいですが、「コード」の部分の話です。(やり方は「アドバイス」ってとこに書いてあります)
gentaro

2019/06/21 14:51

退会しとる…やさしく教えたつもりなんだけどなぁ…
guest

回答1

0

javascript

1function onMyEdit(e) { 2 //Log保存用シートの名前 3 const logSheetName = "log"; 4 const sheetName = e.range.getSheet().getName(); 5 if (sheetName === logSheetName) { 6 return; 7 } 8 const dispValue = 9 typeof e.value === "undefined" || typeof e.value === "object" 10 ? "Delete" 11 : e.value.toString(); 12 const dispOldValue = 13 typeof e.value === "undefined" ? "Create" : e.oldValue.toString(); 14 const email = e.user.email; 15 16 //ここからLogシートに書き込み 17 //Log保存用シート 18 const logSheet = e.source.getSheetByName(logSheetName); 19 20 //引数で指定した行の前の行に1行追加 21 logSheet.insertRowBefore(2); 22 //logSheet.getRange(1, 1, 1, 8).setValues([["更新日", "更新時間", "更新者", "シート名", "行番号", "列番号", "変更前", "変更内容"]]); 23 const present = new Date(); 24 logSheet 25 .getRange(2, 1, 1, 8) 26 .setValues([ 27 [ 28 Utilities.formatDate(present, "JST", "yyyy/MM/dd(EEE)"), 29 Utilities.formatDate(present, "JST", "HH:mm:ss"), 30 email, 31 sheetName, 32 e.range.getRow(), 33 e.range.getColumn(), 34 dispOldValue, 35 dispValue 36 ] 37 ]); 38}

退会するなよー

投稿2019/06/21 15:52

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問