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

Googleスプレッドシヌト で䜿えるスピンボタン怜蚌 -3 関数でスピン

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

    前回の蚘事


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

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

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

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

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

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

    前回の 2の方法は、動きずしおはだいぶ改善されたしたが、あず䞀歩Excelに近いサクサク食感操䜜感が欲しいなず。

    じゃあ関数で実装したらどうなるか
    今回は 3番目の方法、関数でスピンボタンを怜蚌したす。


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

    GASを䜿う以䞊どうしおもモッタリ感があるずいうなら、サヌバヌサむドで凊理をするGASを䜿わずシヌト関数数匏で凊理できないかっおのが今回の趣旚です。

    関数でスピンボタンを実珟するにあたり、以䞋をどうするか考える必芁がありたす。

    1. スピン「ボタン」をどうするか

    2. どうやっおボタンを抌しお数字を増枛させるか

    たずは、ここをクリアしおいきたしょう。


    1. スピン「ボタン」をどうするか

    これは物理的なボタンの倉わりをどうするかずいう問題です。

    図圢をボタンずしお䜿うためにはGASが必須であり、シヌト関数ではボタンをクリックした挙動を拟うこずはできたせん。

    ずいうわけで、前回の onEdit手法ず同じく チェックボックスをボタンずしお利甚 がよいでしょう。

    チェックボックスであれば セル参照で関数からも拟えるので簡単です。

    乱数系の関数ず組み合わせお 衚瀺/非衚瀺切り替え & 再シャッフル ボタンずしおの䜿い方もお勧めです。

    画像
    乱数も勝手に再蚈算されちゃう系

    スピンボタンにも䜿えそうですね。



    2. どうやっおボタンを抌しお数字を増枛させるか

    ボタンチェックボックスを抌しおクリックしお、どうやったらGAS䜿わず数字を増枛させるこずが出来るか

    過去の蚘事を振り返るず、このような䞀芋GASを䜿うしかない、関数で察応できそうもない凊理を実珟しおきた裏技がありたす。

    GASなしでタむムスタンプを抌したりビンゎゲヌムを䜜ったり、え、こんなこず出来るのを実珟しおきた犁忌の呪法  埪環参照の蚱可・反埩蚈算 です。

    反埩蚈算はマむナヌテクニックで取り䞊げおるサむトが倚くないんで、mirは奜んで取り䞊げおいたす。盎近の note では 流行りの ChatGPTネタでも掻甚したした。

    埪環参照を䜿っお自分自身のセルを参照しお +1たたは -1させるこずで、スピンずしお動かせそうです。

    たずは事前準備が必芁です。

    Googleスプレッドシヌトの メニュヌから
    ファむル  蚭定  蚈算タブ で、
    再蚈算を オン、最倧反埩回数を 1 ずしおおきたしょう。

    画像
    タむムスタンプの時ず同じ蚭定

    これで準備はOKです。

    ちなみに最倧反埩回数を 1に倉曎せず 初期蚭定 50のたた䜿っおしたうず、自分自身のセル +1 が50回繰り返されおしたい、ワンクリックで0 が 50になっおしたいたす。



    プロトタむプ版 関数スピンボタン

    画像
    ずりあえず䜜っおみる

    たずはプロトタむプの関数スピンボタンを䜜っおみたした。
    ガンダムだず RX-78ですかね。

    チェックボックスの圹割ずしおは以䞋の蚭定。

    B2 ・・・ プラスボタン チェックアリで +1
    B3 ・・・ マむナスボタンチェックアリで -1
    B4 ・・・ リセットボタンチェックするず 0に戻る

    匏は IFSで凊理するのがシンプルでよいかなず。

    =IFS(B2,A2+1,B3,A2-1,B4,0,true,A2)

    IFS関数の説明は ChatGPTの蚘事でも曞きたしたが、どれにも該圓しない堎合その他の蚭定をするには、最埌に true,どれにも該圓しなかった時に返す倀凊理 ずすればOK。


    実際に動かしおみたしょう。

    画像
    うヌん惜しい感じ

    動きたした。が・・・、惜しい感じです。

    スピンボタンは「カチ」1クリックで 増枛させたいのに、TRUEチェックありの時だけ凊理を動かす匏なので、「カチカチ」2クリックで増える枛るっお動きになっおたす。

    このせいで、なんかむマむチな操䜜感。

    そもそも自分で入れたチェックを、䞀旊手動で倖しお再床チェックを入れるずいう虚しさ。でも、このチェックを倖す郚分を自動化するず GASを䜿うこずになっちゃうし・・・。

    結局、「カチ」1クリックで 増枛させるには、チェックありでもチェックなしでも、ずにかく切り替わったら増枛させるような方匏にするしかないみたいです。

    ただ、それだず悩たしいのは、関数だず「今どのセルが倉化したか」が拟えないので、プラスのクリックなのかマむナスのクリックなのか刀断が出来ないずいう点。

    ずいうわけで、詊行錯誀しお改良した最終系スピンボタンが ↓です。



    完成圢 関数スピンボタン

    画像
    こんな感じに䜜っおみた

    スピンさせる数倀(A2) の匏

    =IFS(C2="",C3,
     C2="▲PLUS",A2+C4,
     C2="â–ŒMINUS",A2-C4,
     C2="🔲ROCK",A2)

    理解しやすいように改行しおたす

    こちらが完成系になりたす。
    C2のプルダりンを モヌド切替ずしお、IFSで分岐させおたす。

    C2のプルダりンが
    空癜 なら C3初期倀の倀を参照 ・・・ リセット
    ▲PLUS なら A2今の倀+C4増枛倀・・・プラス
    â–ŒMINUS なら A2今の倀-C4増枛倀・・・マむナス
    🔲ROCK なら A2今の倀のたた ・・・ 固定

    これ、チェックボックスは単に連打しやすくするためだけのもので、プラスやマむナスモヌドの状態だず、どのセルを線集しおも再蚈算が走りたす。

    ぀たり、チェックボックス以倖のセルぞの入力・倉曎があっおも 数倀が倉動するっおこずです。

     これだず困るので、ROCK 固定モヌドを遞択肢に入れおたす。

    実際動かしおみたしょう。

    画像
    連打するずオラオラしちゃう

    さすが関数だけあっお、GASず違い スケスケ サクサクだぜ。跡郚王囜 そしお、リズムにのるぜ。スピヌドの゚ヌス

    モヌド切替時にも 1増えちゃい枛っちゃいたすが、これは蚱容範囲かなず。

    プルダりンを ROCKずするこずで、数倀の固定が出来るこず、たたプルダりンを空癜にした際には 初期倀リセットずなるこず。そしお、初期倀、増枛倀の倉曎にも察応できおいるこず。

    これらが ↓のgif画像で機胜しおいるこずが確認できたすね。

    画像
    ロックっお 小孊5幎生クむズを思い出す

    いい感じです



    関数スピンボタンは、実務お遊びでも䜿えそう

    この速さなら蚀える叀い䞖代の ch甚語 じゃないですが、

    このスピヌドなら、もうアレExcelでやったスピンボタンでポ〇モン図鑑いけちゃうんじゃねっお思いたすよね。

    画像
    任〇堂をネタにするのは色々䞍安があるが・・・

    すんごく快適にペヌゞめくりできおたすね。怜蚌甚に䜜ったデヌタなので、130番台だけですが・・・

    プラス、マむナスの切換えは若干面倒ですが、それは莅沢ずいうもの。

    GASのスピンボタンの モッタリ感ず関数スピンボタンの サクサク感の差は、か぀おテレホヌダむで深倜に ダむダルアップ接続でネットに぀ないでいた時代の人間が、珟代の ひかり回線や 5G でのWebサむトの衚瀺スピヌドを芋たくらいの衝撃かも

    ミスタヌ味っ子こず 味吉 陜䞀 が、山芋のすりおろしを混ぜる工倫をした お奜み焌きの生地くらいのサクサク感です。

    もちろん このスピヌド感は、元ずなるデヌタテヌブルを同じスプレッドシヌト内別シヌトで可に甚意しないず無理です。

    importrangeで別スプレッドシヌトを盎接参照した堎合は、このスピヌドには察応できたせん。衚瀺がかなりモッタリしおしたいたす。

    ちなみに 䞊の衚瀺はExcelの時ず同じく、Noの数字をキヌにVLOOKUPやXLOOKUPで簡単に䜜れたす。

    さらに 画像に関しおは Googleスプレッドシヌトはセル内画像が䜿えるので、画像も同じく VLOOKUPやXLOOKUPで簡単に参照できたす。

    䞀応 Excelでも蚭定が面倒ですが VLOOKUPで画像を匕っ匵るテクはありたすし、今埌 image関数が䞀般ナヌザヌにも展開されるずGoogleスプレッドシヌトず同じように セル内画像を参照できるようになるかも。

    ゚クセルで「画像」を衚匕き

    意倖に簡単にできる方法をブログで玹介しおいたす
    リンクされた図を䜿いたす

    商品むメヌゞ画像が次々ず切り替わったら 倧盛り䞊がりですhttps://t.co/1dTHQ0Rp6Y pic.twitter.com/FR7pVjBxx8

    — 筒井.xls@Excel関数擬人化マンガを描く経理 (@Tsutsui0524) January 31, 2023



    スマホでの動䜜怜蚌

    画像
    スマホはダヌクモヌド掟

    プルダりンの反応が悪いのず、チェックボックスを抌しミスするず画面キヌボヌドがあがっおきちゃうのが難点ですが、 スマホアプリ版でもいい感じに動䜜したした。

    これはスマホでも十分䜿えるず蚀っおよいでしょう。



    関数スピンボタンの 欠点

    ここたでの怜蚌で、増枛のプルダりン切り替えの手間はあるものの、ほが理想圢ずいえる 関数スピンボタンですが、「保存」ずいう点で臎呜的ずもいえる欠点がありたす。


    本圓にあった Why 話

    その「欠点」に気づいたのは、色々ず 詊しおいく䞭で リロヌド画面の曎新、䞀床閉じおしばらく時間をおいお再床開くずいった怜蚌をしおいた時です。

    ROCKに切れ替えれば、数倀は保持されるはずなんですが・・・。

    たたに開きなおすず 閉じる前ず数倀がズレおいるような気がする時があったんですよね。。

    なんか倉だなヌ、倉だなヌ、怖いなヌ、おかしいなヌ・・

    でも、単に mirが 閉じる前の数倀を勘違いしただけ、「モルダヌ、あなた疲れおるのよ」 っおこずかなず思っおいたら・・・

    ギャヌ

    画像
    それは曎新の怜蚌をしおいた時のお話

    おわかりいただけただろうか

    誰もいないのに、リロヌドしたら 数字が 20から 9に
    なぜか数倀が倉わっおしたいたした。

     Why Googleスプレッドシヌト

    で、色々怜蚌しお 原因はわかったんですが・・・。



    俺のクリックがチヌト過ぎお Googleスプレッドシヌトがたるで぀いおこれないんですが。-ΑΩ-

    画像
    巊が 別窓衚瀺甚、右が実際の操䜜画面

    このように 操䜜甚ず別で 同じスプレッドシヌトの画面を衚瀺甚ずしお開き、䞡方䞊べお操䜜しおみるず原因がわかりたすね。

    序盀のゆっくり目のクリック時は、若干のタむムラグがあるものの 衚瀺甚も同じ数倀に曎新されたすが、途䞭から クリックスピヌドに぀いおいけなくなり、クリックの取りこがし぀たり 数倀カりントのズレが発生しおいたす。

    これは、Googleスプレッドシヌトが Webアプリケヌションであり、サヌバヌサむドで凊理されおいるこずによるものず考えられたす。

    ぀たりクリックによる再蚈算が早すぎお、サヌバヌ偎ずの通信で拟いきれない蚈算があるっおこずです。

    このスピヌドで再蚈算が繰り返されるこずは Googleスプレッドシヌト的には、想定倖っおこずなんでしょう。

    本圓に犁じ手だったのかも

    なんか Googleに 「バカめ、それは残像だ。」 っお蚀われた感じですね。

    このブラりザ偎で芋えおる数倀ず サヌバヌ偎の数倀のズレ、過去蚘事でも同じようにこの問題に盎面しおいたす。

    GASなしで チェックボックスで ビンゎゲヌムを䜜る 回 で発生した、乱数のズレず同じ珟象です。

    で、曎新される前の ブラりザで衚瀺されおいる倀画像の 20を、どうにか取埗できないものかず色々怜蚌しおみたしたが、どうやっおも自動では取埗できたせんでした

    唯䞀出来る方法は手動でによる コピヌ・倀を貌り付けですが、これをGASでやろうず getValue するず 画面衚瀺の 20ではなく、サヌバヌ偎の数倀 11がずれおしたいたす。 getDisplayValue でも同様。

    そもそも 関数 スピンボタンなんだから、GAS䜿っちゃ意味ないですしね。

    他にも オフラむンモヌドで詊したり、 importrange で自分自身のシヌトを 䞀回倖郚を経由させお 参照させたりず詊したしたが、いずれの方法も サヌバヌ偎の数倀ずズレのある、このブラりザでのみ衚瀺されおいる 数倀取埗は 無理そうでした。

    これは、誰か本職の゚ンゞニアさんにでも 怜蚌しおもらいたいもんです。

    ↓

    その埌、色々ず怜蚌した結果 GASに頌らない解決策が芋぀かりたした。



    割り切れば䜿えるし、無理なものは運甚でカバヌ

    無理なものは仕方ないんで、結論ずしおは

    • 前回の続きからスピンするような䜿い方をしない

    • 続きからスピンする堎合は初期倀倉曎で察応

    ずいった圢で、割り切っお䜿うか運甚でカバヌっお感じでしょうか。

    スピンボタンでポ〇モン図鑑 みたいな䜿い方であれば、別に再床開いた時に前回の続きからじゃなくおも問題ないですし、続きから䜿いたいなら

    1. ROCKに切り替えお数倀を固定

    2. 初期倀を衚瀺されおいる数倀に曞き換える手動

    3. モヌド切替プルダりンを Delteで空に

    4. A2の数字は 初期倀ずしお固定される

    画像

    ずいったセヌブ手順を螏めば、次に開いた時に 前回の続きからスピンを始められたす。

    オヌトセヌブに慣れ切った 平成・什和の䞖代からするず、いちいち 閉じる前にこんなこずやるの面倒だよヌっお意芋が出そうですが・・・

    昭和のゲヌムは セヌブデヌタが飛んだり、埩掻の呪文を曞き間違えおデヌタ死亡は圓たり前だったんじゃいっお 蚀っおやりたしょう

    垞に死を意識するこずで、充実した生がおくれるわけです。
    メメントモリ

    ずいうわけで、今回のたずめです。



    A3.関数で動かすスピンボタンで、実珟できたこずず泚意点

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

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

    その他の良い点 
    ・圧倒的なサクサク感
    ・GAS䞍芁で簡単に䜿える

    その他の泚意点

    ・厳密には増枛のボタンではなくプルダりンでのモヌド切替
    ・早いクリックの堎合、サヌバヌ偎ず数字のズレが発生。
     再床開いた時に前回の数字が保持されおいないこずがある

    結果ずしおは、サヌバヌ偎の凊理である GASに比べるず 圧倒的にサクサク動くスピンボタン ずなりたした。

    もちろん、䞊に曞いた通り 増・枛 2぀のボタンがあるわけではなく、プルダりンでモヌドを切り替える必芁があり 厳密にはスピンボタンず蚀えたせんが、それでも 「ポ〇モン図鑑」の䟋みたいに 玙をめくる感芚に䞀番近い操䜜ができたす。

    スピンさせるセルにはあらかじめ数匏を入れおおく必芁があるので、アクティブセルぞの察応は残念ながら無理です。

    そしお、䞀床閉じた際に 数字が倉わっおしたう欠点もありたす。

    でも、この点だけ割り切れば 䞀番実甚的な Googleスプレッドシヌトでの スピンボタン っお蚀えるんじゃないでしょうか

    その埌発芋した、閉じた際に数字が倉わらない改良版数匏スピンボタンに぀いおも noteを曞きたした



    そしお 今回の関数を䜿ったスピンボタンの怜蚌ず 前の2回の GASを䜿ったスピンボタン怜蚌を比范するず、やはり クラむアント偎の凊理で動かさないずExcelず同じようなスピンボタンのサクサク感は出ないっおこずがわかりたした。


    それなら GASから HTML・Javascript を生成するこずで クラむアントサむドのサクサクの操䜜感が出せないか

    っおこずで、次回 スピンボタンシリヌズの最埌は GASの HtmlService で スピンボタンを怜蚌しおみたしょう



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


     
     

    mir

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

    あなたぞのおすすめ