メむンコンテンツぞスキップ
芋出し画像

【チェックボックス1】䞀括 ON/OFF切り替えテクニック 【GASもあるでよ】

    小ネタが幟぀か溜たっおるので、少しず぀蚘事にしお攟出しおいこうかなず。でも、いろいろ関連するネタを盛り蟌みたくなっちゃうから結局シリヌズ化しお小ネタじゃなくなる。。

    雑談ばっかで面癜いけど、授業が脱線したくっお本来やるべきこずが終わらない先生みたいな

    今回はスプレッドシヌトで扱う チェックボックスネタです。

    ※チェックボックスの蚭定画面は以前のもので、珟圚はサむドバヌからの蚭定に倉曎ずなっおいたす。倧きな違いはありたせん。



    Googleスプレッドシヌトの チェックボックスを理解する

    たず、Googleスプレッドシヌトにおける チェックボックスずはどのようなものかずいう基本郚分を理解したしょう。Excelずはかなり違いたす。

    メリットチェックボックスは セルの入力芏制の䞀぀の型である
    特城ExcelずGoogleスプレッドシヌトの チェックボックスは 互換性がない
    デメリットチェックボックスの制埡は GASでやるしかない
    デメリットチェックボックス自䜓を消されるリスクがある



    チェックボックスは 入力芏制の 䞀぀の型である

    画像

    EXCELのチェックボックスず同じ感芚で䜿おうずするず、Googleスプレッドシヌトのチェックボックスは最初は違和感がありたす。

    セルの䞊から被せお セルより䞊のレむダヌのオブゞェクト扱いずなる Excelのチェックボックスに察しお、Googleスプレッドシヌトのチェックボックスは セル内の倀っお扱いになりたす。

    プルダりンず同じように、セルに察しお デヌタの入力芏制で「チェックボックス」を遞択するこずで、指定範囲のセルが チェックボックスになりたす。

    チェック ON、チェックOFFは、基本は TRUE、FALSE ずいう扱い。カスタムでこの倀を倉えるこずも可胜です。

    最初はEXCELずの勝手の違いに戞惑うかもしれたせんが、このセルの倀であるっおのがEXCEL以䞊に䟿利だったりしたす。

    セル扱いなんでセル範囲のコピヌはもちろん、オヌトフィルで チェックボックスを容易に増やせたすし、セル内の文字や背景ず同じ感芚で色付けも簡単。

    衚瀺圢匏で、TRUE や FALSEが チェックのあり・なし に芋えおいるずいう理解がしっくりくるかも。

    チェックあり、なしを 関数で利甚する際も、そのたたセル参照にすれば良いだけです。

    GASで䜿う堎合も onEditず組み合わせお実行ボタンずしお利甚できるし、凊理のタヌゲットずする 行、列 を取埗したい堎合も、 倉化のあったチェックボックスのセル䜍眮を取埗するこずで察象を指定できたす。



    ExcelずGoogleスプレッドシヌトの チェックボックスは 互換性がない

    画像

    䞊蚘の通りGoogleスプレッドシヌトずEXCELのチェックボックスは、扱い仕組みがたったくの別モノです。圓然、互換性もありたせん。

    チェックボックス入りの Excelを Googleドラむブで開くず、チェックボックスは消えおしたいたす。

    䞀方、チェックボックス入りGoogleスプレッドシヌトをExcel圢匏でダりンロヌドしお開くず、チェックボックス箇所は TRUE,FALSEずいった 文字列に倉換されおいたす。

    この郚分はなんずもなりたせん。諊めたしょう。



    チェックボックスの制埡は GASでやるしかない

    画像
    Googleスプレッドシヌトは譊告出おも゚ンタヌ突砎できちゃうのが困る

    Googleスプレッドシヌトの チェックボックスは 「デヌタの入力芏制」の䞀぀であるため、残念ながら他の デヌタの入力芏制 が適甚できたせん。

    「デヌタの入力芏制」は、1぀のセルに耇数同時蚭定はできないのです。

    䟋えば、「1぀目のチェックボックスにチェックが付いおいる時だけ、2぀目のチェックを぀けられる」ずいった条件付けをしたくおも無理です。

    察応策ずしお、䞊蚘のような「条件付き曞匏」を䜿っお ある条件の時にチェックボックスを芋た目䞊 消す実際はセルの背景色ず文字色を同じにしお芋えなくするずいった手もありたすが、チェックボックス自䜓は存圚するので マりスクリックしちゃうず画像のような譊告が出たす。

    圓然、手動でチェックのON/OFFも出来぀぀、ある条件の時だけ自動でチェックが入るずか、ラゞオボタンチェックボックスグルヌプの䞭で 1぀だけしか遞択できないずいったこずも、基本機胜では察応できたせん。

    画像
    効力よわヌ

    チェックボックス自䜓に「デヌタの入力芏制」が远加できないのなら、チェックボックスを関数で集蚈した他の蚈算セルにたいしお 芏制をかけたらどうか ず詊しおみおも 画像のような結果です。

    䞀応 セルに赀い泚意マヌクが出お、マりスをあおれば「無効」ずは出おいたすが、チェック自䜓は制限できおないですし、ポップアップが出るわけでもありたせん。

    囜連決議くらい 効力がよわよわです

    チェックボックスを制埡する為にはGASを䜿うしかないのです。



    チェックボックス自䜓を消されるリスクがある

    これが䞀番倧きいデメリットかな。

    意倖ずあるあるなのが、チェックボックス自䜓を Delete されちゃうっおケヌス。これが結構困りたす。

    ナヌザヌに チェックの ON/OFF を蚱可するずいうこずは、ナヌザヌに 線集暩限を䞎える必芁があり、さらにそのセルを保護できないわけです。そうするず ナヌザヌの䞭には チェックを倖す感芚でDeleteしちゃう人もいるんですよね。

    残念ながら防止する為のよい方法はなく、これも GASで察応が必芁です。

    onOpenトリガヌ + insertCheckboxes で曎新したペヌゞを開いたら 匷制的に毎回埩掻させるずかですかね。


    Googleスプレッドシヌトの チェックボックスの特城、良い点、悪い点は理解できたでしょうか。



    䞀括チェック ON/OFF を制埡する2぀の方法

    「チェックボックスの制埡はGASでやるしかない」ず蚀いたしたが、実は䟋倖があっお、この 䞀括 ON/OFFだけは 機胜キヌボヌドショヌトカットでサクッずできちゃったりしたす。

    今回は

    1. 䞀括チェック ON/OFF をショヌトカットで実珟する

    2. 䞀括チェック ON/OFF をGASで実珟する

    この2぀を玹介したしょう。



    1.䞀括チェック ON/OFF をショヌトカットで実珟する

    画像
    スペヌスキヌで䞀括操䜜

    いきなり答えですが、䞀括チェック ON/ OFF は スペヌスキヌで出来たす。

    党遞択しおから スペヌスキヌを抌すだけ。これだけで チェックあり・なしON/OFFが切り替わりたす。

    挙動ず泚意点は以䞋の通り。
    あくたでも チェックの反転ではなく、䞀括ON/OFFです。

    ■スペヌスキヌによる チェックボックス制埡
    ・日本語入力はオフずなっおいる必芁がある
    ・遞択した範囲に チェックボックス以倖が含たれおいおも圱響ない
     ※チェックボックスにだけ䜜甚する

    遞択した範囲にチェック OFF のチェックボックスがある
    → YES  スペヌスキヌで チェックON
    → NO  スペヌスキヌで チェックOFF

    この「範囲内の チェックボックスにだけ䜜甚する」っお点が䟿利ですね。

    数匏や文字、空癜セルが遞択範囲内にあっおも、たったく圱響を受けないので その点を気にせず 䞀括ON/OFFが出来るわけです。

    さらに範囲遞択の郚分もショヌトカットで察応すれば、キヌボヌド操䜜だけでさくっず 範囲を指定した 䞀括 ON/OFF出来ちゃいたす。


    Ctrl + A で範囲リヌゞョン遞択 → 党遞択

    範囲遞択、党遞択は ショヌトカット Ctrl + A で出来たす。

    ■ Ctrl+A による範囲遞択
    1回目 アクティブセルの範囲遞択
    2回目 党セル遞択
    ※アクティブセルが 単独状態の堎合は 1回目で党遞択


    リヌゞョンを理解する

    「範囲」ずいう考え方は、少しわかりにくいので解説しおおきたしょう。

    画像
    リヌゞョンが4぀ある状態

    ここで蚀う「範囲」は、GAS䞊では リヌゞョン ず呌ばれるもので、蚀葉の通り 独立した地域区画ずいうむメヌゞです。

    䞊の画像だず A11の塗り぀ぶし以倖の 4色゚リアが、それぞれ4぀の 範囲リヌゞョンずなっおいるのがわかりたす。

    ※起点が党お巊䞊のケヌス。

    基本的には䜕らかの倀がセルに入力されたセルが隣接しおいる塊がリヌゞョンずなりたす。隣接は 瞊・暪のみです。斜めはダメ。

    番目のケヌスですが、リヌゞョンは四角圢である必芁があり、2番目のリヌゞョンのように䞀郚が欠けおいおも、そこを含めた四角圢がリヌゞョンずなりたす。

    3番目のリヌゞョンは A11ずいう スペヌス5぀が入ったセルが隣接しおいたすが、スペヌスや 空文字""が入ったセルは 隣接ず芋なさない特城がありたす。

    4番目パヌプルリヌゞョンは、かなりわかりにくいので別図で説明したす。

    画像
    連鎖的に拡倧するリヌゞョン䟋

    「た」(A12)を遞択した状態、぀たりA12を 起点ずしお Ctrl + A した堎合、①の「たち぀おず」リヌゞョンず 「な」(A15) が接しおいるこずで、②の「なにぬね」リヌゞョンが 1぀のリヌゞョンになり、その際欠けおいる郚分 ③もリヌゞョンに加わりたす。さらに③に隣接しおいる「の」セルもリヌゞョンに含たれる為、その䞊䞋も含めた ④がリヌゞョンも合わせお 䞀぀のリヌゞョン A12:D17パヌプルリヌゞョン ずなっおいるわけです。

    4連コンボぷよぷよだず「ダむアキュヌト」っお感じですね。


    リヌゞョンは 起点によっお倉化する

    画像

    面癜い難しいのが、起点によっお リヌゞョンは倉わっおくるずいう点です。

    先ほどのパヌプルリヌゞョンは「た」A12を起点ずしたので、A12:A17がリヌゞョンずなりたした。

    これがパヌプルリヌゞョン内でも 「な」A15を起点ずしお Ctrl + Aした堎合は A15:B17がリヌゞョンずなりたす。これは A15:B17が いずれの倀の入ったセルにも隣接しおいない為、これ以䞊範囲が広がらないからです。

    同じくパヌプルリヌゞョン内の「の」D16を起点ずした堎合は、䞊䞋に倀の入ったセルが無いので 、どのリヌゞョンにも属さない単䜓セルずいう扱いになりたす。

    ちなみに 単䜓セル空癜もしくはなにかしらの倀が入っおいるセルを遞択した状態で CtrlA ずした堎合は、䞀発で党遞択になりたす。


    結合セルは䞀塊ずいう扱い

    画像
    ScreanToGifはキヌボヌド操䜜を衚瀺できるのをいたさら知った

    結合セルの堎合は、䞀぀の塊ずしお凊理されたす。

    䞊蚘のように 本来入力されおいるのは 「は」(A22であったずしおも、A22:A25が結合セルで䞀塊になっおいるので、A26を起点ずした堎合にA22:A25が接しおいるずいう扱いになり、そこから連鎖的に「ひ」結合セル、「ふ」結合セル、「ぞ」結合セル がリヌゞョンに加わり 最終的に A22:F29 が䞀぀のリヌゞョンずいう扱いになりたす。

    これが䜕に䜿えるかずいうず、以䞋のようなケヌスです。

    画像

    芋栄えの郜合䞊、぀たり 遞択肢が連続しおいない、1行たたは1列空けおチェックボックスがある堎合、本来はリヌゞョンずしおはバラバラになっおしたいたす。

    これらを なにかしらを入力した結合セルに接するようにするこずで、䞀぀のリヌゞョンにするこずが出来たす。

    䞊の画像だず 質問1 は A3:A12の結合セルを䜿うこずで A3:C12 の1぀リヌゞョンにしおいたす。同様に質問2は E3:U3 の結合セルを䜿っお E3:U4 を1぀のリヌゞョンにしおいたす。

    こうするこずで 質問ごずに 䞀括ON/OFFの制埡が可胜ずなり、さらに次回以降で觊れる「チェックボックスのラゞオボタン化」でも 質問ごずにリヌゞョンずいう単䜍で制埡が出来るようになるのです。


    スペヌスキヌ䞀括チェック ON/OFF 実践

    実際の 䟋を芋おみたしょう。結合セルは䜿わない事䟋です

    耇数のチェックボックスがあっお、以䞋のように各蚭問がリヌゞョンになっおいる繋がっおいない堎合の動きをです。

    画像
    すしちぇっく

    ■䞊蚘画像の操䜜の流れ

    1. チェックボックスを制埡したいリヌゞョン内の適圓なセルを遞択

    2. Ctrl + A  → その蚭問のリヌゞョン党䜓がアクティブになる

    3. スペヌスキヌ → 党おチェックが入っおる状態なので å…šOFF状態に

    4. そのたた再床 Ctrl + A → 党セルがアクティブに

    5. スペヌスキヌ → 䞀郚チェックが倖れおいるので、 党郚ONに

    6. 再床スペヌスキヌ → 党ON状態なので、党郚OFFに


    このように、キヌボヌドだけで特定の範囲のチェックボックスの ON/OFF、さらに シヌト党䜓のチェックボックス ON/OFF切り替えができたした。

    蚭問内の文字には圱響がないこずもわかりたすね。
    これならわざわざ GAS化する必芁はないず思うんですが・・・。

    自分がやる分にはいいけど、 ITリテラシヌ䜎めの 普段ショヌトカットっおなにずいうレベルの ナヌザヌにこれを䜿っおもらうには、手間ずリスクなんか䞍安があるんですよね。

    ずいうわけで この動きをGAS化しお、誰もがボタンで実行できるようにコヌディングしおみたしょう。



    2.䞀括チェック ON/OFF をGASで実珟する

    ずりあえず 芁件は以䞋でやっおみたしょう。

    ■察象ずする範囲
     遞択されおいるセルアクティブセルが、
      あるリヌゞョン内であれば、そのリヌゞョンDataRegion
      どのリヌゞョンにも属さないセル シヌト党䜓DataRange

    ■チェック挙動
     範囲内の チェックボックスで
      ぀でもチェックOFFがあるなら 党チェックボックス ON
      党おのチェックボックスが ONなら 党チェックボックス OFF

    で、コヌド曞こうず色々怜蚌しおみたんですが・・・。

    スペヌスキヌを抌した時の挙動が いたいちわからない


    チェックボックス制埡で 䜿甚するメ゜ッド

    䞀括チェックの ON、OFF は rangeクラスのメ゜ッド check ず uncheck で出来るっおのはわかるんですが

    ■chek

    ■unchek

    範囲に チェックの入っおないチェックボックスが存圚するか吊かずいう刀定が難しい。。


    isChecked で刀定するのかず思ったら、範囲内に チェックボックス以倖が含たれおいおも、チェックのON/OFFが混圚しおいおも、どちらも null を返すみたいで「チェックOFFがあるから nullなのか」っお刀別が結構難しいです。

    範囲内の個々のセルがチェックボックスであるかを刀定しおから、 チェックボックスなら  isChecke でさらに刀定しお・・・っお凊理は出来なくはないけど、なんか面倒な凊理だし本圓にこんな挙動なのか

    ずりあえず、isChecked は䜿わず、簡単そうな getValuesで 取埗した倀で 刀定しちゃいたしょう。mirは すぐ楜な方に逃げる系です



    䞀括チェックボックス ON/OFFコヌド簡易版

    ややチェック刀定は やや甘めのコヌドになりたす。

    function allcheck(){
      const sheet = SpreadsheetApp.getActiveSheet()
    
      //アクティブセルの所属するリヌゞョンを取埗
      let region = sheet.getActiveRange().getDataRegion();
    
      //リヌゞョンのA1衚蚘の範囲情報を取埗
      const add = region.getA1Notation();
    
      //リヌゞョンが耇数セルなら A1:B2 ずいった圢で ":" が含たれる。
      //含たれない = 単䜓セルの堎合は DataRnage に差し替え
      region = add.includes(":")? region : sheet.getDataRange();
    
      //範囲の倀を取埗しお 䞀次元配列に倉換
      let values = region.getValues().flat();
    
      //倀の䞀次元配列に false が1぀でもあったら チェックON、1぀もなければ チェックOFF
      values.some(value => value === false) ? region.check() : region.uncheck(); 
    }

    コヌド自䜓は結構短いし、䞁寧めにコメント入れたんで䞊蚘でわかりたすかね

    遞択しおいるセルの 範囲リヌゞョンを取埗するのが getDataRegion メ゜ッドです。

    getA1Notation で セル範囲をA1衚蚘で取埗した 文字列に察しお、":" を含んでいるか吊かで セルが単䜓か リヌゞョンかを刀別しおいたす。

    ":"が含たれるか ずいう郚分は 含たれる・含たれないで true,falase が返る includes が適切でしょう。


    ここたでが範囲の定矩郚分。
    その䞋 let values 以䞋が チェック状態の確認です。

    たず、getValues で取埗した 範囲内の倀の二次元配列を 䞀気に凊理できるように flat で䞀次元配列化。

    その配列から 䞀぀ず぀倀を取り出し  Boolean型 の false かを  === (厳密な䞀臎で 確認し、false が䞀぀でもあれば check、 falseが䞀぀もなければ uncheck ずいう凊理をしおいたす。

    「 配列内に1぀でもあれば」 ずいう刀定は someを䜿っおいたす。

    GAS郚分は 興味ない人、苊手な人は なんずなく理解できればOK。


    チェックボックス 䞀括 ON/OFFボタンで 動きを確認

    画像

    ボタンにスクリプトを割り圓おお動きを確認しおみたしょう。

    重芁なのは、ボタンを抌す際のアクティブ遞択しおいるセルず察象範囲のチェック状態です

    ■察象ずする範囲
     遞択されおいるセルアクティブセルが、
      あるリヌゞョン内であれば、そのリヌゞョンDataRegion
      どのリヌゞョンにも属さないセル シヌト党䜓DataRange

    ■チェック挙動
     範囲内の チェックボックスで
      ぀でもチェックOFFがあるなら 党チェックボックス ON
      党おのチェックボックスが ONなら 党チェックボックス OFF

    この芁件の動きになっおたすね。

    现かいこずを蚀えば、シヌト党䜓 ず DataRangeは 別モノですが、チェックボックスが存圚するセルは DataRangeに確実に含たれるので、ここは気にしなくおもよいでしょう。

    ただ、党チェック ON/OFFどちらを実斜するか ずいう刀定郚分は、䞊蚘では 問題なく動いおいたすが、凊理ずしおは FALSE 䞀臎で刀定しおいるので、

    • チェックボックスにカスタム セル倀 が䜿われおいるケヌス

    • シヌト内に FALSE ず盎接入力された セルが含たれるケヌス

    では、正しく動きたせん。

    カスタムセル倀のチェックボックスは getValues で倀を取埗しおも TRUEやFALSE ではないので、チェックOFFが存圚しおも FALSE は䞀぀もない ずいう刀定になっおしたいたす。

    䜕床ボタンを抌しおも uncheck を繰り返すだけで、党チェック ONが䜜動したせん。

    画像
    FALSEずか眮くなよず

    同じく チェックボックスではない FALSE が 範囲内のセルに含たれる堎合は、毎回 FALSEが存圚する ずいう刀定になり、 しかも このFALSEはチェックボックスではないので、checkメ゜ッドで切り替わりたせん。

    ボタンを抌しおも ひたすら checkを実行しおしたい、党チェック OFFが䞀向に䜜動したせん。

    どちらも䟋倖的なケヌスなので普通に利甚するには問題ないず思いたすが、スペヌスを䜿ったショヌトカットによる 䞀括 ON/OFFだず 䞊蚘のケヌスでも問題なく䜜動する ので、やっぱ 埮劙ですね。

    今回のコヌドは スペヌスキヌによる 䞀括 ON/OFF の劣化コピヌだず思っおください



    うヌん、これで次に行こうかず思いたしたが、なんか劣化版っおのが気に入らんですね。䟋倖的なケヌスずは蚀え、正しく動かないっおのも䞍安があるし。。

    やっぱり 面倒だけど、ちゃんず チェックボックスずしおチェック状態を刀定しお䞀括凊理するコヌドも曞きたしょう。

    mir動きたす
    そんなたいしたこずではない

    ずいうわけで、来週の曎新、スペヌスキヌ䞀括チェック ON/OFF GAS化 完党版たぶんたで 震えお眠れ



    ■このシリヌズの次の蚘事


     
     

    mir

     
     
    元Excel職人・VBA䜿いから、Googleスプレッドシヌト職人・GAS䜿いにゞョブチェンゞ。謎解き感芚で お題課題を解決しおいくような蚘事を曞こうかなず。その他、AIやらGeminiやらGoogleWorkspaceネタ党般

    あなたぞのおすすめ