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

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

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

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

Q&A

解決済

1回答

7878閲覧

値が変更されたらセルに背景色を付ける方法

mickey_6

総合スコア13

Google Apps Script

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

0グッド

0クリップ

投稿2019/01/09 07:05

実現したいこと

ある行のセルの値を変更すると、変更したセルの背景色が変わるという仕様にしたいです。
(もともと入っている値も、変更時にセルに入る値もプルダウンから選択します。)

もともと入ってる値から、変更されたらときだけ背景色が付くようにしたいので
2度目、3度目の変更や、もともとの値に戻っても、色はそのままで大丈夫です。

また、変更後、全ての背景色をリセットもしたいのですが、いまいちわかりません。。

コード

変更があったセルを取得する方法がいまいちわかりません。。

gs

1 2function BackgroundColor(){ 3 4 var ss = SpreadsheetApp.getActiveSpreadsheet(); 5 var sht = ss.getActiveSheet(); 6 var cell = ss.getActiveCell(); 7 var row = cell.getRow(); 8 9 var color ="pink"; 10 11 if(cell.getColumn() == 6){ //F列にあるセルの変更で色を変えたい 12 ss.getRange().setBackground('pink'); 13} 14} 15

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

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

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

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

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

papinianus

2019/01/09 07:11

仕様を再度検討してください、2度目や3度目であることはシートは覚えていられません。検知できるのは直前の値とかわったことだけです。例えば"最初の値"をとなりの列などに保存するとか、1度かわったことをとなりの列に「変更済」と書くなどするとかいった追加的な操作が必要になります。
mickey_6

2019/01/09 07:21

直前の値が変わったら、背景色が変わるという仕様で大丈夫です。 2度目や3度目であることは分からなくて大丈夫ですし、もともとの最初の値が分からなくても変更されたということさえ、分かればいいのですが・・可能でしょうか。。
papinianus

2019/01/09 07:23

すみません。読解を間違っていました。戻したら白背景に戻さないといけないと思っていました(チェック項目的な使い方を想定)。回答を修正してしまいましたが、最初の回答でできています。
guest

回答1

0

ベストアンサー

こういうスクリプトをかけば、プルダウンだろうが何だろうが、編集したセルがピンクになります。

さらに、スプレッドシートを開き直せば、メニューにtoolが増え、そこに「背景色リセット」というのがあるので、これを押せば、データがある矩形範囲の全部の背景色が白になります。

javascript

1function onEdit(e) { 2 if(e.range.getColumn() !== 6) { return; } // F列以外なら中断する 3 const colname = "pink"; 4 e.range.setBackground(colname) 5} 6function onOpen(){ 7 const myMenu=[ 8 {name: "背景色リセット(F列全部)", functionName: "resetBgColorF"}, 9 ]; 10 SpreadsheetApp.getActiveSpreadsheet().addMenu("tool",myMenu); //メニューを追加 11 12} 13function resetBgColorF() { 14// SpreadsheetApp.getActiveSheet().getDataRange().setBackground(null); 15 SpreadsheetApp.getActiveSheet().getRange("F:F").setBackground(null); //F列のみ背景をリセット 16}

投稿2019/01/09 07:18

編集2019/01/09 09:03
papinianus

総合スコア12705

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

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

papinianus

2019/01/09 07:36

質問に回答しておきます。 変更があったセルを知るのではなく、変更があったときに処理が行われるようにします。その仕組みが"onEdit"です。この名前の関数を書くと編集時に処理が走り、かつ編集した情報が関数の引数として渡されます<"(e)"のeに入ってくるということ>
mickey_6

2019/01/09 08:23

ありがとうございます!無事にできました。 追加なのですが、F列のみに上のスクリプトを反映させるには どうしたらいいのでしょうか。。。
papinianus

2019/01/09 08:26

F列の背景色のみリセットしたいということですか? F列がかわったときだけピンクになるようにはしているはずです。現時点のコードを利用してください。
mickey_6

2019/01/09 08:39

すみません、F列のみ背景をリセットしたいということです。。;; F列のみの変更は大丈夫でした。
macaron_xxx

2019/01/09 08:59

細かい話ですが、背景色をリセットする場合は .setBackground("white") ではなく .setBackground(null) とします。
mickey_6

2019/01/09 23:53

ありがとうございます。無事にできました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問