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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

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

Google Apps Script

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

Q&A

1回答

1409閲覧

GAS 1シートのGASがに複製したシートにも反映してしまうのを修正したい

SEKINORI

総合スコア4

Google スプレッドシート

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

Google Apps Script

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

0グッド

0クリップ

投稿2019/12/31 00:47

前提・実現したいこと

スプレットシートで
GASでチェックボタンを作ってチェックするとと日時を記入している、AとA’のシートがあります。
(A’はAのコピーシートです)
片方のシートのチェックすると、2シートとも日付が自動入力してしまいます。

これを、チェックしたシートだけ自動入力できるように修正したいのですがどのようにしたらよいか教えてください

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

Aシートのチェックボタンを押すとAシートとA'シート両方に日付が自動入力してしまう

該当のソースコード

function onEdit(){
var ash = SpreadsheetApp.getActiveSpreadsheet()
var sh= ash.getSheetByName(" シートA ")
var rng=sh.getActiveCell()
var r =rng.getValue()
var row=rng.getRow()
var col=rng.getColumn()
var today=new Date
if(col==9){
if (r){
sh.getRange(row,10).setValue(today)
}
else {
sh.getRange(row,10).setValue("")
}
}
if(col==12){
if (r){
sh.getRange(row,13).setValue(today)
}
else {
sh.getRange(row,13).setValue("")
}
}
if(col==15){
if (r){
sh.getRange(row,16).setValue(today)
}
else {
sh.getRange(row,16).setValue("")
}
}

var ash = SpreadsheetApp.getActiveSpreadsheet()
var sh= ash.getSheetByName(" シートA' ")
var rng=sh.getActiveCell()
var r =rng.getValue()
var row=rng.getRow()
var col=rng.getColumn()
var today=new Date
if(col==9){
if (r){
sh.getRange(row,10).setValue(today)
}
else {
sh.getRange(row,10).setValue("")
}
}
if(col==12){
if (r){
sh.getRange(row,13).setValue(today)
}
else {
sh.getRange(row,13).setValue("")
}
}
if(col==15){
if (r){
sh.getRange(row,16).setValue(today)
}
else {
sh.getRange(row,16).setValue("")
}
}
}

試したこと

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

提示されたコードの問題点は、今いるシートを取得していないからです。
例えば、提示されたコードの書き方であれば SpreadsheetApp.getActive().getActiveSheet() で今操作しているシートが取得できるので、さらにその名前を取得して、それがシートAかA'かを判定し、yesであれば、そのシートに対して書き込みをする、処理をしないといけません。
今のコードは、開いているシートが I 列であれば、全く別の、例えばシートZであっても、シートAにもシートA'にも書き込む処理をしています。
繰り返しになりますが、編集時に今開いているシートに書き込みをするように実装しましょう。編集時の状況を判定せず、既知の名前でシートを取得して、そこに書き込みをする、を2回書くのは避けましょう。

編集時の状況に即さない場所を触らないようにするためには、イベントハンドラーに渡されるイベントオブジェクトから情報を取ってくるのがよいと思います。

javascript

1function onEdit(e) { 2 const curRange = e.range; 3 const c = curRange.getColumn(); 4 if([9, 12, 15].indexOf(c) === -1) return; // do nothing if col is not i,l,o 5 const curSheet = e.range.getSheet(); 6 if(["sheet A", "sheet A-dash"].indexOf(curSheet.getName()) === -1) return; // do nothing 7 curRange.offset(0,1).setValue(e.value ? new Date() : ""); 8}

投稿2020/01/09 15:41

papinianus

総合スコア12705

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問