ご訪問ありがとうございます。
Googleシートマスターのひろしです。
前回
【GAS】チェックボックスを一気にすべてON/OFFする方法(Gスプレッドシート)
複数のチェックボックスを一気に変更することができます。
今回は、とっても価値の高い方法をお伝えします。
これを知ることであなたは、
- シート内の変化により(OnEdit)起動させる方法がわかります。
- getDataRegionによりある程度の範囲を取得する方法がわかります。
なので、サクッとマスターして
と答えてあげてください。
動画はこちら
シートはこちら
*クリックすることでシートが開きます。(コピーしてお使いください)
スクリプト
function onEdit(e) {
const SH_NAME = "チェックボックスでチェック" //シート名
const CKPOS = "G6" //一括チェックボックスのセル位置
const range = e.range
if ((range.getSheet().getName() != SH_NAME) || //シート名が異なる
(range.getA1Notation() != CKPOS)) //位置が異なる
return
const region = range.getDataRegion()
range.isChecked() ? region.check() : region.uncheck()
}
ポイント
range.getDataRegion()
で特定のセルから隣接した範囲(Ctrl+Aで指定した範囲)を取得することができます。
なので、その範囲に対して check()
でチェックボックスのON uncheck()
でチェックボックスのOFFができます。
この動きをGASで実現する
onEdit関数は、どのシートの操作でも飛んでくるので、シート名をチェックして
すぐに返してあげましょう。
最後までご覧いただきありがとうございます。
つぎはこちら
【GAS】チェックボックスのON/OFFで項目をグレーアウトしメールを返信する方法
条件書式の効果的な使用方法がわかります。
チェックボックスのON/OFFにより項目のON/OFFが設定できるようになります。
最初は、以下のようにやっていたのですが、
function onEdit(e) {
const Array1 = ['I2', 'I3', 'I4', 'I5', 'I6', 'I7', 'K3']
const SH_NAME = "チェックボックスでチェック"
if (e.source.getActiveSheet().getName() != SH_NAME) return
if ((e.range.getRow() != 2) || //全国の行
(e.range.getColumn() != 7)) return //全国のカラム
const sh = SpreadsheetApp.getActiveSheet()
const nval = e.range.getValue()
Array1.map((val) => { sh.getRange(val).setValue(nval) })
}
以下を参考にさせていただきました。
コメント
動画拝見いたしました。
質問させて頂きたいのですが・・・
”フルーツ”も”全国”と同様にしたい場合、新規でGASを作成するのでしょうか??
もし宜しければ、”フルーツ”と”全国”のスクリプトどちらもご教授頂きたいです。
宜しくお願い致します。
まず、動画の以下の時点で
https://youtu.be/Nnrdhaa8PJo?t=513
フルーツに限らず、すべてのチェックボックスで動作します。
で、これだと動きすぎるので動画ではその後、G2 以外を弾くようにしています。
なので、フルーツ(A2)も弾かないようにすればいいです。
具体的には、
(range.getA1Notation() != CKPOS) の行を
((range.getA1Notation() != CKPOS)&& //位置が異なる
(range.getA1Notation() != “A2”))) //位置が異なる
に置き換えればOKです。
※カッコの数に注意してください
お、ひろしさんに知恵袋の回答を拾っていただけてる。
ありがとうございます!
mirさま
さすが知恵袋の回答。『レベルが違う』と思いながらパクらせていただきました。
知恵袋のご回答いただきありがとうございました。
知恵袋のご回答ありがとうございました。
そして、こちらでもわかりやすくご回答いただき、ありがとうございます。
下記の様にスクリプトを入力致しましたら、”全国”のチェックを入れたり、外したりしますと”フルーツ”の方まで全部チェックが付いたり消えたりしてしまいます。
フルーツはフルーツのカテゴリ部分の全チェック・全国は各都道府県のみチェックとしたい場合、どのようにすべきでしょうか??
function onEdit(e){
const SH_NAME=”チェックシート”
const CKPOS=”全国”
const range=e.range
// const sh=SpreadsheetApp.getActiveSheet()
//const range=sh.getRange(“全国”)
if((range.getSheet().getName() !=SH_NAME)||
((range.getA1Notation() != CKPOS)&& //位置が異なる
(range.getA1Notation() != “フルーツ”))) //位置が異なる
return
const region=range.getDataRegion()
// console.log(region.getValues())
range.isChecked()? region.check():region.uncheck()
}
function testchek(){
const sh=SpreadsheetApp.getActiveSheet()
const range=sh.getRange(“全国”)
const region=range.getDataRegion()
// console.log(region.getValues())
range.isChecked()? region.check():region.uncheck()
}
const CKPOS = “G6” //一括チェックボックスのセル位置
はセルの座標を指定するので”全国”では動きませんよ。
再度動画を見て、ゆっくりと動画の通りやり
理解しながらやってみてください。