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

【チェックボックス 番倖線】GASなしで出来る小ネタ 【反埩蚈算】

    チェックボックスネタを党3回曞いおきたしたが、今回は「番倖線」ずいうこずで GASなしでチェックボックスで出来る小ネタを取り䞊げおみたしょう。

    前回の蚘事



    Googleスプレッドシヌト の チェックボックス小ネタ

    他のサむトでも玹介しおいるような基本的な利甚方法は、ここで觊れる必芁もないでしょう。

    たずえば 条件付き曞匏ず組み合わせお、チェックしたら色を付ける、To Doリストみたいな利甚で チェックしたら 項目に取り消し線を入れる、たたはFILTER関数や フィルタ機胜ず組み合わせお、チェックしたものだけを抜出衚瀺させる。

    この蟺りはもちろん䟿利ですが、チェックボックスの掻甚ずしおはメゞャヌなネタだし 基本動䜜なんで難しくも目新しくもありたせん。他のサむトを参考にしおください。

    じゃあ、mirのnoteでは どんな小ネタを取り䞊げるのか

    既に玹介しおいる スペヌスキヌによる 䞀括 ON/OFF以倖だず、やはり 特殊な動䜜をGASなしでやるには、アレが必芁になっおきたす。

    アレっおのは、GASなしでタむムスタンプの蚘事でも登堎した 犁術「反埩蚈算 埪環参照」です。


    事前に反埩蚈算を蚭定する

    ずいうわけで、事前にスプレッドシヌトの蚭定をしおおきたしょう。

    画像

    メニュヌバヌから

    ファむル > 蚭定 > 蚈算タブ ず進み
    反埩蚈算を オン にしお、蚭定を保存 ずするだけです。

    mirも毎回 犁術ずかいっお煜っおるのもよくないんですが、反埩蚈算埪環参照は 衚蚈算においお タブヌ っおわけじゃないです。普通に機胜の䞀぀です。

    ワクチンず違っお副反応もないですし ドラッグみたいな䞭毒性もないので、身構えずに軜い気持ちで䜿っおも問題ないですよヌ。

    これはリンパの流れをよくするマッサヌゞなんで、皆さん普通にやっおるこずですよヌ。䜙蚈怪しい

    ずりあえずは、お詊しで䜿っおみおも倧䞈倫っおこずです。
    これで反埩蚈算を䜿う準備はOK。


    反埩蚈算埪環参照ずチェックボックスで 出来る 小ネタ4遞

    他にも出来るこずはありたすが、今回は以䞋の4぀を玹介したす。

    1. チェックした 日時を隣のセルに曞き蟌む

    2. チェックした順に 番号を振る

    3. チェックした順に 䞊べる

    4. チェックで 乱数を固定する

    こんなこずGAS䜿わなくお出来るの

    っお思うかもしれたせんが、これが実際に出来ちゃうのが 反埩蚈算の面癜いずころ。


    1. チェックした 日時を隣のセルに曞き蟌む

    䞀぀目はチェックボックス連動のタむムうタンプ。

    これは以前  Googleスプレッドシヌト 自動でタむムスタンプを入力する3぀の方法 -3 【GASなし 関数で出来る】 で玹介したテクニックずほが同じです。

    文字が入力されたらの郚分を チェックされたらに倉えればよいだけ。

    䟋えば A1:A20がチェックボックスで、チェックを入れた日時を 隣のB1:B20 にタむムスタンプずしお残したい堎合は、

    画像

    =ARRAYFORMULA(IFS(NOT(A1:A20),,B1:B20>0,B1:B20,A1:A20,NOW()))

    B1に䞊の匏をいれれば OKです。

    これだけで

    画像

    こんな感じで チェックを入れた日時が B列に蚘録されたす。

    スプレッドシヌトを曎新しお䞀床閉じおも蚘録された日時が固定されおいるのがわかりたすね。

    IFSの匏の䞭で重芁なのは順番で、優先床が高い条件を先に巊に蚘述する必芁がありたす。

    今回の堎合は

    優先床1 A列 チェックボックスにチェックが぀いおなければ 空癜
    NOT(A1:A20), ← カンマの埌ろに䜕も入れない = 空癜を返す
    ,
    優先床2 B列に既に時刻が入っおいれば、そのたた
    B1:B20>0,B1:B20
    ,
    優先床3 A列 チェックボックスにチェックが付いおいれば 珟圚時刻を入力
    A1:A20,NOW()

    ずしおいたす。

    A1:A20,NOW() の郚分を先にするず、他の行のチェックが぀いたり他のセルに䜕か入力されただけで 再蚈算が動き時刻が曎新されちゃいたす。

    もう1぀泚意するのが、タむムスタンプの回でも曞きたしたが 既に時刻が曞き蟌たれおいるかどうかの刀断は、 Googleスプレドシヌトの堎合は

    B1:B20<>""  ではなく B1:B20>0

    ずする点でしょうか。

    タむムスタンプの蚘事でも觊れたしたが、ここはExcelず違うんですよね。

    圓然ですが、B1:B20は 保護をかけおナヌザヌに盎線集させないようにするこずも可胜です。

    こうしおおけば、過去日時のタむムスタンプぞ改ざんするこずは䞍可胜ですね。



    2. チェックした順に 番号を振る

    これは 䞊のタむムスタンプ打刻の応甚。A列にチェックボックスがあり、チェックをした順に B列に連番を振るずいうもの。

    比范的簡単です。

    画像

    =ARRAYFORMULA(IFS(NOT(A1:A20),,B1:B20>0,B1:B20,A1:A20,MAX(B1:B20)+1))

    最埌の条件郚分 A1:A20,MAX(B1:B20)+1 以倖は完党に チェック時打刻の匏ず䞀緒ですね。

    A1:A20,MAX(B1:B20)+1 これによっお、チェックが入った隣に その時点でのB列の最倧倀+1 、たずえば B列に入っおる番号が 1,2,3 だったら 最倧倀の 3 に +1した 4を 入れる凊理をさせおいたす。

    最初の回目は 党お空欄なので 最倧倀は 0、 +1 で 1 スタヌトずなりたす。

    画像

    チェック毎に連番が振られ、チェックをした以倖の行には圱響がないこずがわかりたすね。

    先ほどのタむムスタンプ同様、他のセルに線集があっおも再蚈算されるこずはなく、F5曎新スプレッドシヌトのリロヌドでも連番は保持されたす。


    画像
    チェックを倖した時の挙動

    ただ、チェックを倖すず その隣のセルの番号は消えるのですが、MAX関数で連番を振っおいるので、消した番号はそのたたで 垞に最倧倀 +1 の番号が振られれたす。

    䞊蚘のgif では、A5のチェックを倖すず 隣の 3が消えたすが、再床チェックを入れたら、その段階での最倧倀  の +1、8が入りたす。

    残念ながら関数で制埡しおいるので、3を消しおも 自動で 4が振られおいるセルが 3に、5のセルが4にずいった 前に詰める動きはできたせん。

    それでもチェックを付けた順が 前埌するこずはないので、これを応甚するこずで、チェックを付けた順番に䞊べるずいったこずも出来たす。



    3. チェックした順に 䞊べる

    「チェックした順に 番号を振る」の応甚なんですが、単に この番号で関数で゜ヌト䞊び替えしようずするず、埮劙にうたくいきたせん。

    画像

    䟋えば B列B2:B16がチェックボックスで、C列C2:C16)に名前があったずしお、チェックした順に A列に番号を振りたい堎合、 A2セルに以䞋の匏をいれたす。

    =ARRAYFORMULA(IFS(NOT(B2:B16),,A2:A16>0,A2:A16,B2:B16,MAX(A2:A16)+1))

    ここたでは、ほが先ほどず䞀緒ですね。

    この番号を䜿っお E2以降に 番号ず名前を 昇順に出力すれば、「チェック順に䞊べる」ずいう凊理になりたす。

    絞り蟌んで䞊び替えですから、FILTERずSORT を䜿うか、Query関数で orde by  を䜿う方法が思い぀きたすね。


    3-1. Query関数で order byで䞊べ替え 【やや倱敗】

    ■E2に入れる匏
    =QUERY({A2:C16},"select Col1,Col3 where Col1>0 order by Col1 asc",0)

    Query匏の範囲を { } で括っお配列化 しおいるのは mirの蚘述の奜みの問題です。個人的に埌ろの列指定は Col1,Col2 ずいった衚蚘にした方が汎甚性があるので、あえおほが毎回 配列化させおいたす。

    そのたた A2:C16ずしお埌ろの蚘述を select A,C・・・ずいう圢でも問題ありたせん。

    order by Col1 asc でCol1A列の昇順で䞊び替えをしおいたすが、ascの堎合は省略できるので  order by Col1 ずしおもOKです。

    ただ、この匏だず以䞋のような動きになりたす。

    画像

    1぀目のチェックでは反応せず、その埌も䞀぀遅れお出力されおいる感じですね。これは Query偎の蚈算タむミングず 反埩蚈算のタむミングのズレから発生しおいるず思われたす。

    それでは Queryの条件の方、where Col1>0 ではなく、where Col2 =TRUE ずチェックを刀定基準ずしおみたらどうでしょうか

    ※チェックボックス刀定は 文字列ではないので シングルクォヌト付けず =TRUE でOK

    画像

    これはダメですね。チェックは確かに拟えおたすが、今チェックした箇所の番号が拟えおない為、最新チェックの番号が空欄になり 䞀番䞊に出力されちゃっおたす。やはり蚈算タむミングのズレがあるんでしょうね。

    もちろん、適圓なセルで Delete抌せば再蚈算され正しくなるんですが、間違いのもずなんで もう䞀぀の FILTER、SORTでやっおみたしょう。


    3-2. FILTER + SORT で䞊べた堎合 【惜しい】

    ■E2に入れる匏
    =SORT(FILTER({A2:A16,C2:C16},B2:B16),1,true)

    A列ずC列をたずめたものを B列のチェックを条件に FILTERで絞り蟌んで、その結果を SORT で 1列目A列の番号 をキヌに昇順に䞊び替え、ずいう凊理です。

    FILTERしおから SORTず 関数を2段構えにするこずで、反埩蚈算の凊理ずタむミングが合うんじゃないなかっお期埅がありたす。詊しおみたしょう。

    画像

    お、惜しい・・・。䞊びは合っおるし、チェックをOFFにしたずきも反応しおるんですが、番号だけが拟いきれおないケヌスがありたすね。でも、チェックしたものは䞀番䞋にきおいるので、芁件は満たしおるず蚀えるかな。

    これでもいいんですが、せっかくなんで完党な チェック順䞊び替えを実珟したいず思い匏を色々こねくり回したんですが、むマむチ反埩蚈算のロゞックが分からず お手䞊げ状態に・・・。


    3-3. 反埩蚈算に Arrayformulaを䜿わない 【成功】

    で、結局たどり着いたのが反埩蚈算の匏で Arrayformulaを䜿わないずいう方法。

    幞せの青い鳥は実は䞀番近くにいたしたっお感じ

    画像

    ■A2に以䞋を入れお䞋にオヌトフィル
    =IFS(NOT(B2),,A2>0,A2,B2,MAX($A$2:$A$16)+1)

    ■E2に入れる匏は 3-2ず䞀緒
    =SORT(FILTER({A2:A16,C2:C16},B2:B16),1,true)

    これだけで解決したした

    画像
    サクサクだぜヌ

    䞀芋同じように芋えお 反埩蚈算においおは Arrayformulaを䜿うず凊理が埮劙に違うんでしょうね。

    Query の方の匏を䜿っおも同様に問題なく動きたす。 

    原因ず理由がむマむチわからないのが匕っ掛かりたすが、反埩蚈算で期埅する結果にならない堎合は、Arrayformulaを䜿わずに詊しおみるのが良さそうです。


    オマケLAMBDA + BYROWで詊す 【完党にダメ】

    䞀応、Arrayformulaがダメならもう䞀぀のスピらせる手法、LAMBDA + BYROW だったらどうか 䞀応詊しおみたした。

    =BYROW(A2:A16,LAMBDA(r,IFS(NOT(OFFSET(r,0,1)),,r>0,r,OFFSET(r,0,1),MAX(r)+1,true,)))

    画像
    番号が1から増えない

    これはダメですね。理由はわかりたせんが、ナンバヌが1しか぀きたせん。

    Arrayformula ず LAMBDAヘルパヌ関数の スピり方は 感芚的に違うっおむメヌゞでしたが、実際だいぶ違うみたいですね。

    そのうちじっくり怜蚌したいず思いたす。



    4. チェックで 乱数を固定する

    乱数系の関数は ランダムな結果が欲しい時に重宝するんですが、NOW関数ず䞀緒で、シヌト内で入力や倉曎があるたびに再蚈算されちゃうんですよね。

    乱数の再蚈算を制埡できたらいいのに、っお思ったこずある人も倚いんじゃないでしょうか

    もちろんGASでやっおもいいんですが、チェックボックスず 反埩蚈算を䜿っお簡単に実珟できたす。

    画像

    ■D1を乱数固定チェックボックスずした堎合、A2に入れる匏
    =IF(D1,A2,RANDBETWEEN(1,20))
    ※A2 には 120の数字をランダムに衚瀺する

    チェックが倖れおいる時は、シヌト内で線集があるたびに乱数が再蚈算されおいたすが、チェックずすれば乱数の蚈算が固定されおいるのがわかりたすね。

    RANDBETWEENは、数倀範囲を指定しお その範囲内の敎数をランダムで返すこずが出来る関数です。

    これで 乱数を固定した状態で 他のセルを線集できたすね。さらに 応甚すれば A2セルの 乱数を他のセルに出た順にログずしお残すこずも出来たす。

    ん・・・ずいうこずはもしや



    応甚すれば パヌティヌゲヌムのアレが䜜れちゃう

    今回 チェックボックスず 反埩蚈算で実珟できる 小ネタを4぀玹介したした。他にも䜿い方が色々あった気がするんで、思い出したらたた別で蚘事を曞きたす。

    ずころで 最埌の 乱数固定でなんずなくアレが䜜れそうな気がしたせんか

    パヌティヌゲヌムでお銎染みのアレです。そう、ビンゎゲヌムです

    専甚アプリを䜿うか javascript で自䜜するか、スプレッドシヌトで実珟するにしおも GASが必須ず思われがちですが、

    チェックボックス + 反埩蚈算  シヌト関数 + 条件付き曞匏

    これだけで ビンゎゲヌムを スプレッドシヌトで䜜れたす

    ずいうわけで次回は GASを䜿わないチェックボックスネタ の応甚線っおこずで、

    【GAS䞍芁】チェックボックスでビンゎゲヌムを぀くる

    を曞こうかな・・・

    ず思いたしたが、色々な郜合ずチェックボックスが続いお飜きたんで、ちょっず1週 違うネタを挟もうかなず。

    1行カレンダヌの蚘事 番倖線で扱った 祝日を取埗する関数が結構人気だったんで、Googleスプレッドシヌトで 和暊倉換 っおネタを曞こうず思いたす。

    Excelず違っお和暊なんお知らんよっおスタンスのGoogleスプレッドシヌトで、どう和暊を扱えばよいか APIや関数を䜿った方法を怜蚌しおみたしょう。



    ■次の蚘事

    緊急特番的に 最新アップデヌトの玹介蚘事に差し替えずなりたした。
    でも、このアップデヌトはすごい個人的に

    和暊倉換ネタは 1週遅れおの掲茉ずなりたす。


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


     
     

    mir

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

    あなたぞのおすすめ