LoginSignup
hiratabove
@hiratabove (ta bo)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

GAS:スプレッドシートのログ抽出と一緒に、特定セルの値を取得したい

はじめまして、こんにちわ。初投稿になります。

Google Apps Scriptを使用しスプレッドシート上で変更された箇所の
変更ログを抽出したいと思いネット上から下記ソースコードをコピペで拾ってきました。
追加で取得したログと同じ行、別列の値を拾い抽出したいと思っているのですが、
どのように指示を出せばいいのか、それともコード自体を書き直した方が良いのかわからず悩んでおります。

お優しい方、解決方法を教えて下さい。

発生している問題・エラー

変更をかけたセルの値の取得は出来たのですが
そのセルと同じ行、別列を指定し抽出する方法が不明。

該当するソースコード

/// 編集検知
function onEdit(e) {
if (e.source.getSheetName() === 'Log') {return;}

SpreadsheetApp.getActive().getSheetByName('Log').appendRow([
new Date(), // 日時
e.source.getSheetName(), // シートネーム
e.user.getEmail(), // ユーザーのメールアドレス
e.value, // 変更後の値
e.range.getRow(), // 行番号
e.range.getColumnIndex(), // 列番号
]);
}

自分で試したこと

getrangeやvalueの()内に指定してみたのですが、
参照するシートの項目が多いため行、列番号が変わった場合作動しなかったりする。

0

2Answer

まずonEditの引数を理解していますか?

sample_code.gs
const onEdit = (e) => {
  console.log(JSON.stringify(e,null,2)); // 変数の値を取得するが、関数の中身は取得できない
}

A1セルを変更した結果

{
  "user": {
    "email": "***@gmail.com",
    "nickname": "***"
  },
  "value": "hallo",
  "authMode": "LIMITED",
  "range": {
    "columnEnd": 1,
    "columnStart": 1,
    "rowEnd": 1,
    "rowStart": 1
  },
  "source": {}
}

sourceの中身はSpreadSheetなので、省きますが、
わざわざ関数を呼び出さずとも、rangeの範囲やemail等は変数値として入っています。
行と列が数値で欲しいのであればrowStart,columnStartを使って終わりですし、
ついでにemailもuser.emailに入っているので省略ができます(onEditはよく呼び出されると思うので一回一回にかかる時間は極力減らしたい)

A1、A2が欲しいのであればそのための関数も存在するのでこちらを使えば終わりです。
https://developers.google.com/apps-script/reference/spreadsheet/range?hl=en#geta1notation

0Like

丁寧にありがとうございます。
記載いただいたコード、URL等も一緒に確認しながらやってみます。

0Like

Your answer might help someone💌