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

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

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

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

Q&A

解決済

1回答

3034閲覧

GAS 更新日付が自動で入るコードが他のシートにも反映してしまう

slime_Hoimi

総合スコア13

Google Apps Script

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

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

JavaScript

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

Google

Googleは、アメリカ合衆国に位置する、インターネット関連のサービスや製品を提供している企業です。検索エンジンからアプリケーションの提供まで、多岐にわたるサービスを提供しています。

0グッド

0クリップ

投稿2020/01/23 02:48

超初心者で恐れ入ります。

B列を変更したらA列に日付が入るようにしたいです。
サイトを参考に下記コードを書いてみましたが、複数あるシート(シート2やシート3)に
入力すると、下記に指定しているすべてのシートに反映してしまいます。

個別に反映させるにはどうすれば良いかご教示いただきたいです。

宜しくお願い致します。

◆参考にしたサイト
https://qiita.com/daichi_ca/items/23c4d8e662dcbb5571a7

◆コード
function insertLastUpdated() {
var ss = SpreadsheetApp.getActiveSpreadsheet(); //現在触っているファイルを取得
var sheet = ss.getSheetByName('シート1'); //対象のシート名を選択(hogeの部分にシート名記載)
var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得
var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得
var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得
var updateRange = sheet.getRange('A' + currentRow); //どの列に更新日時を挿入したいか。この場合はA列
Logger.log(updateRange); //更新日の記入
if(currentRow > 2 && currentCol == 2) { //2行目以降かつB列の変更を参照とする
if(currentCell) {
updateRange.setValue(new Date());
}
}
var ss = SpreadsheetApp.getActiveSpreadsheet(); //現在触っているファイルを取得
var sheet = ss.getSheetByName('シート2'); //対象のシート名を選択(hogeの部分にシート名記載)
var currentRow = sheet.getActiveCell().getRow(); //アクティブなセルの行番号を取得
var currentCol = sheet.getActiveCell().getColumn(); //アクティブなセルの列番号を取得
var currentCell = sheet.getActiveCell().getValue(); //アクティブなセルの入力値を取得
var updateRange = sheet.getRange('A' + currentRow); //どの列に更新日時を挿入したいか。この場合はA列
Logger.log(updateRange); //更新日の記入
if(currentRow > 2 && currentCol == 2) { //2行目以降かつB列の変更を参照とする
if(currentCell) {
updateRange.setValue(new Date());
}
}
}

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

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

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

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

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

guest

回答1

0

ベストアンサー

動作確認しました。B2 より下に、セルに文字を打ったり、消したりすると、日付が入ったり消えたりします。
(複数範囲でのはりつけには対応していません)

javascript

1function onEdit(e) { 2 const sheetNameMustBe = ['シート1',"a", "さん"]; 3 const columnMustBe = 2; 4 const rowMustBeLargerThan = 1; 5 const offsetRow = 0; //書き込みは同じ行 6 const offsetCol = -1; //書き込みは1つ左の列 7 8 const c = e.range.getColumn(); 9 if (c !== columnMustBe) return; 10 const r = e.range.getRow(); 11 if (r <= rowMustBeLargerThan) return; 12 if (sheetNameMustBe.indexOf(e.range.getSheet().getName()) < 0) return; 13 const targetRange = e.range.offset(offsetRow, offsetCol); 14 if (e.value !== undefined) { 15 set(targetRange, new Date()) 16 } else { 17 del(targetRange) 18 } 19} 20function set(range, value) { 21 return range.setValue(value); 22} 23 24function del(range) { 25 return range.clearContent(); 26}

投稿2020/01/23 03:12

編集2020/01/24 14:21
papinianus

総合スコア12705

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

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

papinianus

2020/01/23 03:14

前回の回答のコードをシート1用として、onEditの名前とシート1とかいてあるところを必要なシートにあわせてコピーして書き換えて、トリガーを追加する、という設定だけで(コーディングなく)今回の事象は回避できます。
slime_Hoimi

2020/01/23 03:17

毎度毎度ありがとうございます!!! 言い訳がましくて申し訳ないのですが超初心者の自分でも意味が分かって読めるコードを使おうと思うとどうしてもよくないコードを参考にしてしまいます… 頑張ってやってみます! ありがとうございます!
papinianus

2020/01/23 03:27

頑張らずに回答の、に、や、さん、をシート2とかシート3にしてください。 ,で、繋げば何個入れても動きます。 あとわからないなら、わからないと書きましょう。というかわからないようなコードはこのケースでは書いてないです。英語が苦手という意味ですか?
slime_Hoimi

2020/01/23 03:40

いえ、コードの構成や意味などは分かるのですが、自分で書くのがまだ難しく感じていて エラーが出た場合どう対応すればいいのかわからず… 教えていただいたコードも「TypeError: undefined からプロパティ「range」を読み取れません。(行 8、ファイル「コード1」)」とエラーが出てしまいます… function onEdit(e) { const sheetNameMustBe = ['シート1','シート2']; const columnMustBe = 2; const rowMustBeLargerThan = 1; const offsetRow = 0; //書き込みは同じ行 const offsetCol = -1; //書き込みは1つ左の列 const c = e.range.getColumn(); if (c !== columnMustBe) return; const r = e.range.getRow(); if (r > rowMustBeLargerThan) return; if (sheetNameMustBe.indexOf(e.range.getSheet().getName()) < 0) return; const targetRange = e.range.offset(offsetRow, offsetCol); if (e.value !== undefined) { set(targetRange, new Date()) } else { del(targetRange) } }
papinianus

2020/01/23 08:45

関数の実行をしないでください。セルを編集してください。
slime_Hoimi

2020/01/24 03:49 編集

根気強く付き合っていただいてありがとうございます。 セルを変更してもA列に日付が記載されず。。。 onEditだとプロジェクトトリガーを付けずとも発動する認識ですが、別に何か設定が必要なのでしょうか? 失敗通知には onEdit TypeError: undefined のメソッド「getColumn」を呼び出せません。(行 8、ファイル「コード1」) change と書かれていました。
papinianus

2020/01/24 14:22

セルを変更とは、具体的に何をしてらっしゃいます? はりつけですか?めもの挿入ですか?書式の変更ですか?
slime_Hoimi

2020/01/27 01:33

B列に担当者名を手打ちで入力しております!
papinianus

2020/01/27 07:41

であれば動作確認してるので動くはず。 ちょっとこっちは諦めて質問文のコードを手直しさせてもらいます。お時間ください。
slime_Hoimi

2020/01/27 07:50

いつも何から何まで世話焼いていただいてありがとうございます(´;_;`) 私も自分で調べてみます!
slime_Hoimi

2020/01/28 07:39

すごい!!できました!!!! 凄く感動してます!! 大変助かりました、ありがとうございます!!!!!
papinianus

2020/01/29 22:55

何もしてないのですが、できてよかったです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問