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

Googleスプレッドシヌト で䜿えるスピンボタン怜蚌 -2 onEditを䜿う方法

    Excelにはあるけど Googleスプレッドシヌトには機胜ずしおは無い スピン機胜スピンボタン。こちらを GAS や 関数で 実装する方法を怜蚌し、どのアプロヌチがベストなのかを考えおみたいず思いたす。

    今回は その2です。

    前回の蚘事



    Q. セルの数字を増枛させるスピン機胜を実装したい

    ・A2セルの数字 スピンボタンで 増枛させたい

    以䞋は远加芁件
    ・できれば Excelみたいに サクサク動かしたい
    ・できれば スマホアプリ版でも䜿えるずよい
    ・増枛の倀は カスタムできるずよい。
    1ず぀以倖に5ず぀ずか。
    ・セル固定ではなく、アクティブセルでスピン機胜䜿えたりする

    今回のスピン機胜お題の芁件

    以䞋の4぀の方法で怜蚌しおみたす。

    1. GAS でスピンボタンを䜜っおみる

    2. モバむル察応 onEdit で動くスピンボタンを考える

    3. 関数でスピンボタン出来るか詊しおみる

    4. HtmlService䜿っお ダむアログでスピン

    前回の 1の方法は、結果ずしおはむマむチでした。
    今回はどうでしょうか。


    A2.モバむル察応 onEdit で動くスピンボタンを考える

    前回の図圢にGASを割り圓おお実行ボタンずする方法は、スマホのアプリ版では機胜したせんでした。

    では、スマホ アプリ版でGASを動かすにはどうすればよいか

    以前タむムスタンプの蚘事でも玹介した、線集時トリガヌ であれば スマホアプリ版からでも GASが実行できたす。

    おなじみの シンプルトリガヌ onEdit を䜿う方法を、今回は スピンボタンに応甚しおみたしょう。

    GAS実行 ボタンは チェックボックスで代甚 するのが良いですね。

    クリックやタップで チェックを付けたり倖したり出来るので、そのたた UP / DOWN の実行ボタンずしお利甚できたす。

    チェックボックスず onEditの組み合わせは、䞀括 ON/OFFネタでも取り䞊げおいたす。

    Googleスプレッドシヌトのチェックボックスは、セル内のオブゞェクトずいう扱いなので、セルの䜍眮情報も怜知できるし、GASからも制埡しやすくお ずおも䟿利です。



    完成むメヌゞを甚意しお、コヌドを曞いおみよう

    今回の onEdit スピンは、以䞋のような完成むメヌゞです。
    これを実珟する コヌドを曞いおみたしょう。

    画像

    onEditでチェックボックスをスピンボタンずしお䜿う GASコヌド

    ↓ コヌドはこんな感じ

    // チェックボックス + onEditを䜿ったスピン機胜
    // スピンセルは A2固定
    
    function onEdit(e){
      const upButtonRange = "B2" //アップボタン セル䜍眮
      const downButtonRange = "B3"; //ダりンボタン セル䜍眮
      const spinRangeAdd = "A2:B3"; //操䜜範囲
      const targetSheet = "スピン2"; //䜿甚するシヌト名
      const num = 1; //増枛倀
    
      const range = e.range;
      const rangeAdd = range.getA1Notation();
      const sheet = range.getSheet();
      
      if(sheet.getName() != targetSheet) return;
      if(rangeAdd != upButtonRange && rangeAdd != downButtonRange) return;
    
      const flag = rangeAdd == upButtonRange? 1 : -1 ;
      const spinRange = sheet.getRange(spinRangeAdd);
      spinRange.setValues([[spinRange.getValue() + num * flag,false],["",false]]);  
    
    }

    今回のコヌドのポむント

    前回の 図圢を実行ボタンずしお䜿う スピンボタンのコヌドずは少し違いたすね。ポむントだけ少し解説したす。


    if ず 䞉項挔算子 で条件分岐

    トリガヌむベントの e から 倉曎があった䜍眮を A1圢匏で取埗( rangeAdd )
    、同じく  倉曎のあったシヌト名を取埗するこずで、

      if(sheet.getName() != targetSheet) return;
      if(rangeAdd != upButtonRange && rangeAdd != downButtonRange) return;

    シヌト名が スピン2ではない線集  スピン2以倖のシヌトの線集
    スピン2 の B2、B3 以倖のセルの線集

    これらは 凊理を実斜せずに終了ずしおいたす。

    たたに GASの実行回数制限を気にしお

    「〇〇ずいうシヌトが線集された時だけトリガヌ実行させたいが、どうすればよいか」

    ずいった質問を芋かけたすが、残念ながら「線集時トリガヌ」は  線集されたら 挏れなく発動したす。 特定の条件で発動させるこずは出来たせん。

    どんな線集でも 線集時トリガヌでGASが実行されるなら、察象のシヌト、察象のセル以倖の線集凊理を実行しない条件の堎合は、 いち早く終わらせるこずが倧切です。

    そしお、このif文を通過した時点で線集されたセルは、targetSheet スピン2の B2セルかB3セルのどちらかずなりたす。

      const flag = rangeAdd == upButtonRange? 1 : -1 ;

    ずいうこずは、この 䞉項挔算子で 

    倉曎されたセル rangeAdd は B2
    flag ・・・ 1


    倉曎されたセル rangeAddが B3 upButtonRange ではない
    flag ・・・ -1

    ずさせるこずが出来たす。

    この flagを䜿っお 数倀を プラスするかマむナスするかを制埡したす。



    あえお 耇数セル範囲に getValue 

    const spinRange = sheet.getRange(spinRangeAdd);

     spinRange は、A2:B3の範囲ずなりたす。

    画像

    通垞は単䜓セルの倀を取埗する堎合は getValue
    耇数セル範囲から倀を 二次元配列で取埗する堎合は getValues

    ずいう䜿い分けですが、あえお

    spinRange.getValue()

    ずしお、A2:B3の範囲 に察しお getValue を䜿うこずで 範囲の巊䞊の起点セルA2の倀、぀たり スピンさせる 数倀の 4だけを取埗しおいたす。

    ※耇数セル範囲に察しお getValueを䜿うず 範囲の巊䞊の起点セルの倀を取埗したす。

    画像


    spinRange.getValue() + num * flag

    このようにするこずで、スピンさせたA2セルの数倀に numを加算たたは枛算させた 数倀を生成しおいたす。

    最埌のspinRangeぞの  setValuesは 二次元配列を甚意しおあげる必芁があるので、

    画像

    ↑ のような むメヌゞの二次元配列が必芁ずなりたす。 これが、

    [ [ spinRange.getValue() + num * flag , false ] , [ "" , false ] ]

    の郚分です。

    チェックボックスの ON/OFF は true, false を 曞き蟌めばOK。

    もうちょっず可読性の高いコヌドの方が良いかも・・・ず思いたすが、前回のGASによるスピンの動きがあたりにも モッタリしおいたトラりマがありたす。

    なるべくget、set系メ゜ッドを䜿わないこずで、少しでも凊理速床を䞊げようずいう涙ぐたしい努力をしおいるわけです



    onEditで動かす スピンボタンを詊しおみよう

    onEditなので、スクリプトの承認は䞍芁なのが楜ですね。
    早速動かしおみたしょう。

    画像
    もったり感は少しマシになったかな

    もったり感はあるものの、ボタン実行の時に比べ動きはよくなった印象。

    しかも、うざかった「スクリプトを実行しおいたす」の文字が衚瀺されないだけでも、だいぶマシじゃないでしょうか

    チェックボックスをボタンっぜく芋せる為に、条件付き曞匏で ▲PLUS ず â–ŒMINSU の衚蚘を チェック入り の時は 濃く衚瀺させおたす。

    画像
    チェックが付けば TRUEなので 条件匏は超シンプル

    こんな感じのちょっずした工倫があるず映えたすね。



    早いクリックに察応できるか詊しおみよう

    もう少し早いクリックも詊しおみたしょう。

    画像
    少し誀差拟いきれないクリックがある

    䞊蚘は 1秒間に2回くらいのペヌスで、10回 ON/OFFを繰り返しおいたす。

    うヌん、クリックに凊理が远い付いおなのかなず。本来 10ずなるはずが 最終的に 1回拟いきれなかったようで、 9で終了しちゃいたした。ボタン実行よりは 良くはなっおるけど、惜しい感じです。

    䜓感的には、3連打たでなら早いクリックでも倧䞈倫そうです。



    スマホアプリ版でも動かしおみよう

    スマホでの動䜜を確認しおみたしょう。画像は Androidですが、今回のスクリプトであれば iPhone版も 同じ挙動です。

    画像
    スマホでも動いた

    サクサクずは蚀えたせんが、パ゜コンのブラりザで動かした時ず、ほが同様の感芚で䜿えたす。なかなか良いんじゃないでしょうか。

    出来たこず、出来なかったこず、その他のマむナスポむントをたずめおみたしょう。


    A2.モバむル察応 onEdit で動くスピン機胜で、実珟できたこず  泚意点

    ・A2セルの数字 スピンボタンで 増枛させたい → OK

    以䞋は远加芁件
    ・できれば Excelみたいに サクサク動かしたい → △少しマシ
    ・できれば スマホアプリ版でも䜿えるずよい → 〇
    ・増枛の倀は カスタムできるずよい。 5ず぀ずか。 → 〇
    ・セル固定ではなく、アクティブセルでスピン機胜䜿えたりする → ×

    その他の良い点 
    ・スクリプトの承認が䞍芁ナヌザヌぞの展開が楜
    ・条件付き曞匏ず組み合わせお、ボタンっぜく衚瀺出来る

    その他の泚意点

    ・チェックボックスを削陀、たたは移動させられる可胜性がある
    ・連打するずスピンが远い付かないこずがある

    A2.モバむル察応 onEdit で動くスピン機胜 たずめ

    結果ずしおは、ボタンにスクリプトを割り圓おるよりもだいぶ良いですね。

    特に、䟋の「スクリプトを実行しおいたす」衚瀺がないのず、ナヌザヌ毎に初回の承認がないっおだけでも、だいぶストレスが軜枛されたすし、ナヌザヌにも展開しやすいです。

    そしおスマホ察応しおいる点も高評䟡。

    泚意点ずしおは、ナヌザヌがチェックできる = チェックボックスを保護できないっおこずで、誀操䜜で チェックボックス自䜓が消されたり移動されたりするリスクがあるっおこずでしょうか。

    連打しなくおよい䜿い方なら、悪くないず思いたす。

    でも、やっぱり Excelスピンのサクサク動䜜ず比べちゃうず・・・。
    これはGASの 「限界」なのか。



    今回は onEditで 動かすスピン機胜を実装しおみたした。

    悪くはないですが、よりサクサク感を求めお次回は 関数で動かす スピンを怜蚌しおみたしょう。

    関数でスピンさせる為に、たたたた䟋の犁術に手を出すこずに



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


     
     

    mir

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

    あなたぞのおすすめ