前提・実現したいこと
今まで、シフト表をエクセルで作っていましたが、未来のクラウド化に向けて、グーグルスプレッドシートで作り直すことにしました。
ただ、日々のシフト作成は上司がやるので、あまりフォーマットは変えずに、GASなどを利用して、作成する際の手間を省こうとしています。
前置き長くなりましたが、
指定した文字が入力されると、入力したセルの下10行をセルを塗りつぶしたいのですが、可能でしょうか?
例:”休み”と入力したセルの下10行が赤く塗りつぶされる。
その際の対象範囲は、シート全体で、”休み”と入力するところは決まっていません。
調べても、入力したセルの行全体だったり、入力するセルが決まっていたりと、欲しい情報がありませんでした。
発生している問題・エラーメッセージ
該当のソースコード
試したこと
補足情報(FW/ツールのバージョンなど)
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/26 23:56
2020/12/27 12:53
2020/12/27 12:56
回答3件
0
ベストアンサー
おまたせしました。これはどうでしょうか?
私の環境では気になる遅さですが、一応動くように見えます。
script
1 2function onEdit(e) { 3 let word = "休み"; 4 let targetRange = e.source.getActiveSheet().getRange(Number(e.range.getRow() + 1), e.range.getColumn(), 10, 1); 5 6 if (e.value == word) { 7 targetRange.setBackground('red'); 8 } 9 if (e.range.getValue() != word && ! targetRange.getValues().flat().includes(word)) { 10 targetRange.setBackground('white'); 11 } 12}
この場合、Apps scriptの方で直接onEdit()を実行したとしても、
肝心の e がセットされていない状態での実行になるので、
e == undefined;
undefined.valaue って何の事?
となってしまいます。
普通は、その e は、何かやった時に、その情報が入ってきます。
https://developers.google.com/apps-script/guides/triggers/events#edit
どうしても、onEdit()を直接実行したいとしたら、
eがundefinedの時は私のコードを実行しないようにするというのはどうでしょうか?
普通はこんな事やらないと思うのですが、
求められたことに答えるならば、
上の文全体を、if(e != undefined){ 上の文 }
のような形で包んであげるとかどうでしょうか?
script
1function onEdit(e) { 2 if (e != undefined) { 3 let word = "休み"; 4 let targetRange = e.source.getActiveSheet().getRange(Number(e.range.getRow() + 1), e.range.getColumn(), 10, 1); 5 6 if (e.value == word) { 7 targetRange.setBackground('red'); 8 } 9 if (e.range.getValue() != word && !targetRange.getValues().flat().includes(word)) { 10 targetRange.setBackground('white'); 11 } 12 } 13}
投稿2020/12/27 13:25
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/27 13:33
退会済みユーザー
2020/12/27 13:40
2020/12/27 13:41
退会済みユーザー
2020/12/27 14:00
2020/12/27 14:21
2020/12/28 07:33
2020/12/28 07:39
0
条件付き書式で対応できます。
もちろん全てのシートに対応させたいとか、シートが追加された時にも自動で適用させたい場合はGAS使った方がよいですが、対象シートが決まってるなら、どこに「休み」が入力されてもといっても、ある程度範囲は想定できると思うので、条件付き書式のカスタム数式を試してみるとよいかと思います。
「休み」を消したあとに元に「戻す」って追加要件は、もし元の状態が別の色付けしてた場合、GASだと厳しいんじゃないかなと思います。
こっから条件付き書式の設定の流れ
・条件付き書式で適用する範囲を A2:Z100とか A2:AZ1000 といった形で A2をスタートとして想定される範囲をセット。(「休み」入力のセルの1つ下から色を付けたいとのことなので、1行目は対象外となる為 A2を起点としてます)
・書式設定の条件でカスタム数式を選ぶ
・式に以下を入れる。(10行目より上の時だけ範囲が違ってくるのでIFで分岐)
=COUNTIF(INDIRECT("R"&IF(ROW(A2)<11,1,ROW(A2)-10)&"C"&COLUMN(A2)&":R"&ROW(A2)-1&"C"&COLUMN(A2),FALSE),"休み")>0
・書式設定のスタイルで希望する色をセット
投稿2020/12/27 13:12
編集2020/12/27 13:14総合スコア3002
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
こんなのどうでしょうか?
script
1function onEdit(e) { 2 if (e.value == '休み') { 3 e.source.getActiveSheet().getRange(Number(e.range.getRow() + 1), e.range.getColumn(), 10, 1).setBackground('red'); 4 } 5}
投稿2020/12/27 11:42
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/12/27 12:01
退会済みユーザー
2020/12/27 13:24
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。