【GAS】 チェックボックスでそのへんのチェックボックスをすべてON/OFFする方法(getDataRegion)

コピペでできるGAS

GAS応用の一覧

ご訪問ありがとうございます。

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が設定できるようになります。

GAS応用の一覧

 

最初は、以下のようにやっていたのですが、

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) })
}

以下を参考にさせていただきました。

コメント

  1. 初心者 より:

    動画拝見いたしました。
    質問させて頂きたいのですが・・・
    ”フルーツ”も”全国”と同様にしたい場合、新規でGASを作成するのでしょうか??
    もし宜しければ、”フルーツ”と”全国”のスクリプトどちらもご教授頂きたいです。
    宜しくお願い致します。

    • hiroshi より:

      まず、動画の以下の時点で
      https://youtu.be/Nnrdhaa8PJo?t=513
      フルーツに限らず、すべてのチェックボックスで動作します。

      で、これだと動きすぎるので動画ではその後、G2 以外を弾くようにしています。

      なので、フルーツ(A2)も弾かないようにすればいいです。
      具体的には、
      (range.getA1Notation() != CKPOS) の行を

      ((range.getA1Notation() != CKPOS)&& //位置が異なる
      (range.getA1Notation() != “A2”))) //位置が異なる

      に置き換えればOKです。
      ※カッコの数に注意してください

  2. mir より:

    お、ひろしさんに知恵袋の回答を拾っていただけてる。
    ありがとうございます!

  3. 初心者 より:

    知恵袋のご回答ありがとうございました。
    そして、こちらでもわかりやすくご回答いただき、ありがとうございます。

    下記の様にスクリプトを入力致しましたら、”全国”のチェックを入れたり、外したりしますと”フルーツ”の方まで全部チェックが付いたり消えたりしてしまいます。

    フルーツはフルーツのカテゴリ部分の全チェック・全国は各都道府県のみチェックとしたい場合、どのようにすべきでしょうか??

    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()
    }

    • hiroshi より:

      const CKPOS = “G6” //一括チェックボックスのセル位置
      はセルの座標を指定するので”全国”では動きませんよ。

      再度動画を見て、ゆっくりと動画の通りやり
      理解しながらやってみてください。

タイトルとURLをコピーしました