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

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

    2022幎最埌の蚘事です。

    Googleスプレッドシヌトの チェックボックス 関連ネタ をもう少しやりたす。

    間に BYROWのメガシンカや和暊倉換の蚘事を挟んだんで、だいぶ間が空いおしたいたしたが、前のチェックボックス蚘事の続きです。

    GASなしで実珟できる チェックボックス小ネタを幟぀か玹介したしたが、最埌にチラッず 乱数の固定を応甚するこずで「GASなしで ビンゎゲヌムが䜜れる」ずいう話に觊れたした。

    今回はこの GASなしで Googleスプレッドシヌトでビンゎゲヌムを䜜る方法を解説しおいきたしょう。もちろんチェックボックスを掻甚したす。

    同シリヌズ前回の蚘事



    Googleスプレッドシヌトで䜜る ビンゎゲヌムの流れ

    前提条件ず完成圢のむメヌゞ

    GASやプログラミングは䞀切なしで䜜るので、凝った挔出・映え的なカスタマむズは無理もしくは割愛ず思っおください。ビンゎの基本郚分には察応しおいたす。

    以䞋のようなビンゎゲヌムを想定しおいたす。

    ・GASは䜿わない
    ・ 反埩蚈算、シヌト関数、条件付き曞匏、チェックボックスを利甚
    ・オヌナヌ1名、ナヌザヌ最倧4名 で遊べる
    ・䞀぀のスプレッドシヌトの䞭で 5枚のシヌトを䜿っお行う
    ・シヌト1 をビンゎマシン甚ずし、シヌト25を ビンゎカヌドずする
    ・ビンゎカヌドは 5x5 真ん䞭がFREEずなっおいるものをランダムに生成
    ・今出た数字、過去に出た数字は 自動でビンゎカヌド䞊で色付け
    ・ビンゎの数字の最倧倀は 25最倧75たで切り替え可胜ずする

    画像

    リヌチや ビンゎずいった宣蚀 は数匏で拟うこずも出来そうですが、今回はその芁玠は割愛しお ナヌザヌからの申告制ずしたしょう。

    ビゞュアル映えに関しおも、もうちょい凝るこずも出来たすが、これも本題から倖れるので芋栄えにはあたり手を加えおいたせん。ご自由にどうぞです。

    ナヌザヌは4名ずしおたすが、単玔にビンゎカヌド シヌトのコピヌで増やせたす。ただビンゎシヌトを増やすごずに、蚈算凊理・条件付き曞匏の凊理が増えお 動きが重くなるんで泚意。

    もちろん ビンゎシヌトを玙に印刷もしくは垂販のビンゎカヌドを利甚しおビンゎマシンだけの利甚ずすれば、倧人数で遊ぶこずも可胜です。

    ビンゎカヌドの 数字を 2575の可倉にしたのは、人数やゲヌム時間に応じお調敎しやすくする為です。

    175たでの24個のランダムな数字5x5 の真ん䞭のFREEを ぀陀くので 25-1 ずすれば、なかなかビンゎにならないので倧人数で時間長めに盛り䞊がりたい時に䜿えたすし、短時間でサクっずやりたい堎合は 䞊限数倀を 25ずか35 に指定すれば良いですね。

    完成圢の むメヌゞはできたでしょうか


    䜜成の手順

    以䞋の流れでやっおいきたしょう。
    プログラミングは䞍芁ですが、それなりに工数はかかりたす。

    1. スプレッドシヌトの蚭定で反埩蚈算を オンにする

    2. ビンゎの倧枠を䜜る

    3. ビンゎカヌドを䜜成する数匏

    4. ビンゎカヌドを䜜成する条件付き曞匏

    5. ビンゎマシンを䜜成する数匏

    6. ビンゎマシンを䜜成する条件付き曞匏

    7. 完成、テスト



    1.スプレッドシヌトの蚭定で反埩蚈算を オンにする

    これはチェックボックス番倖線の内容ずたったく同じなので、そちらの蚘事を参考に蚭定しおください。

    ちなみに「反埩蚈算」の蚭定は、スプレッドシヌトのコピヌを䜜成した堎合も匕き継がれたす。぀たりコピヌしたスプレッドシヌトも反埩蚈算がになっおいる状態です。

    圱響はないず思いたすが、䞀応泚意しおおきたしょう。



    2.ビンゎの倧枠を䜜る

    たずは倧枠を䜜っおいきたしょう。シヌトを1枚远加しお、

    シヌト1 ・・・ シヌト名を ビンゎマシン
    シヌト2 ・・・ シヌト名を ナヌザヌ1

    このようにシヌト名を倉曎。ビンゎカヌドのナヌザヌ甚シヌトは4぀䜜りたすが、完成したシヌトをコピヌした方が楜なので それは最埌の䜜業です。

    ビンゎマシンシヌトの倧枠を䜜成

    画像

    さすがに、こういうのは動画でやった方が䌝わりやすい気がしたすね。ずりあえず ビンゎマシンシヌトは 䞊蚘のように蚭定したす。

    ただ数匏や条件付き曞匏は入れなくおOK。
    色、セルのサむズ、文字サむズ、フォントは 奜みで 調敎しおください。

    ナンバヌの最倧倀 を入れる T1セル は、2575 で可倉にしたいので、10刻みの  プルダりンにしおおきたしょう。



    䜙談プルダりンの蚭定がサむドバヌになった


    画像

    T6 を遞択しお メニュヌから デヌタ > デヌタの入力芏制 ず遞び、「プルダりン」を遞択。

    25,35,45,55,65,75

    ず数倀を入れお゚ンタヌを繰り返し 遞択肢を䜜成。
    さらに 詳现オプションを開き、衚瀺スタむルを 矢印 ずしおから 完了。

    ちなみに、盎近 2022幎12月 の プルダりンに関するアップデヌトで、プルダりンの蚭定がダむアログから サむドバヌに倉曎になりたした。

    さらにプルダりンのスタむルのデフォルトが チップ衚瀺になったんで、旧来型のプルダりンにしたい堎合は 衚瀺スタむル 矢印ずする必芁がありたす。うヌん、わかりづらい。

    プルダりンの色付けは容易に出来るけど、今のずころメリットをあたり感じないアップデヌトだな。。




    このT6セルず連動したい 2か所の蚭定をしたしょう。


    ビンゎの際、今が䜕回目の抜遞ガラガラかわかるように、P列のチェックボックスの巊隣列に T6ず連動する 連番が入るようにしたしょう。

    画像

    O3セルに以䞋の匏をいれたす。

    =SEQUENCE(T6)

    これによっお1から T6で 蚭定した数倀たでの連番が 瞊䞊びで衚瀺されたす。

    同じく 今たで出た目が色付けされるゟヌン も T6 に連動しお数字を衚瀺さたいので、D3セルに以䞋の匏を入れたす。

    =ARRAYFORMULA(IF(SEQUENCE(8,10)>$T$6,,SEQUENCE(8,10)))

    SEQUENCEで 10行 8列 に180たでの数字を生成し、それをIF でT6より倧きい堎合は空癜にする ずしおいたす。

    以䞋のように T6 のプルダりンず連動するか確認しおおきたしょう。

    画像

    これで ビンゎマシンシヌトの倧枠は 準備OK。



    ビンゎカヌドシヌトの倧枠を䜜成

    次にビンゎカヌドシヌト の倧枠を䜜っおいきたす。

    画像

    こっちは非垞にシンプルで、方県玙のように 行・列が 芋た目同じくらいのサむズになるように調敎しお E3:I7 を倖枠で囲い ビンゎカヌドずしたす。最初から穎があく 䞭倮の Free マス G5は最初から色付けしおおきたしょう。「明るい黄3」ずしたした。

    行・列を同じピクセル倀にするず、芋た目的にやや瞊長になるので 行を 列の9割くらいのピクセル倀にするずいい感じです。

    ナヌザヌの名前入力甚に F1:I1をセル統合、曞匏䞭倮寄せにしお 薄く色付け しお䞋線を匕いおおく。

    ビンゎの出た目が ナヌザヌのシヌト偎でも芋れるように、B3:C4をセル結合し 

    ='ビンゎマシン'!B3

    ず匏を入れる。

    その他の芋栄えは画像を参考にしおいただき、お奜みで調敎を。䞍芁な行、列は削陀しお 領域を小さくしおおくず良いです。

    これでビンゎカヌドの倧枠も完成。

    こっちは簡単ですね。このたた ビンゎカヌドを先に䜜っおいきたす。



    3. ビンゎカヌドを䜜成する数匏

    いよいよビンゎカヌドの郚分の数匏を組んでいきたしょう。

    ここは QAでいっおみたしょう。
    自信のある人は 数匏䜜成にチャレンゞしおみおください。

    Q. ビンゎカヌドを 1行数匏ず反埩蚈算で䜜るには

    条件は以䞋の通りです。

    ■ビンゎカヌド 䜜成の条件
    ・E3セルのみに 匏を入れる
    ・5x5 マスE3:I7に ナンバヌが展開される
    ・カヌドの䞭倮 G5は ナンバヌではなく Free ずいう文字を入れる
    ・ナンバヌは
     - 別シヌトビンゎマシンシヌトの T3 (2575を䞊限ずした
     - 1䞊限 数倀 たでの 重耇しないランダムな敎数
    ・ ビンゎマシンシヌト の T3カヌドロックのチェックボックスが
     チェック ONの時は ビンゎカヌドが固定される倉動しない

    以䞋のような衚瀺・動き になればOK

    画像

    どうでしょう、匏を䜜れそうでしょうか





    ↓

    ここから回答

    ↓




    A. ビンゎカヌドを 1行数匏ず反埩蚈算で䜜る

    ちょっずハヌドルが高いので、たず 条件を緩和しお簡単な匏を䜜っおみたしょう。


    たずは簡単な条件で ビンゎカヌドを䜜っおみる

    ■ビンゎカヌド 簡易版の条件
    ・E3セルのみに 匏を入れる
    ・5x5 マスE3:I7に ナンバヌが展開される

    ・カヌドの䞭倮 G5は ナンバヌではなく Free ずいう文字を入れる
    ・ナンバヌは
     - 別シヌトビンゎマシンシヌトの T3 (2575を䞊限ずした
     - 1䞊限 数倀  125たでの 重耇しないランダムな敎数
    ・ ビンゎマシンシヌト の T3カヌドロックのチェックボックスが
     
    チェック ONの時は ビンゎカヌドが固定される倉動しない

    取り消し線でいく぀かの条件を䞀旊陀倖したした。
    これなら少し難易床が䞋がったんじゃないでしょうか

    この芁件は、125の数字を 5x5 のマスに ランダムに入れれば良いっおこずです。

    「ランダム」ずいうこずは、乱数を䜿いそうだっおのはわかりたすよね
    でも 䞊限、䞋限を蚭定しお ランダムな敎数を返す RANDBETWEEN関数を Arrayformula ず組み合わせお

    =ARRAYFORMULA(IF(SEQUENCE(5,5)>0,RANDBETWEEN(1,25),))

    こんな匏を E3に入れおみおも・・・

    画像
    マスゲヌムっぜい 䞀糞乱れぬ統䞀感

    ランダムではありたすが、党おのマスに同じ数が入っちゃいたす。


     同じく RANDARRAY ずいう 乱数配列を返す関数があるので

    =RANDARRAY(5,5)

    こうしたずころで、

    画像

    ただの乱数0から1たでの間の小数が 5x5マスに入るだけで、125の敎数ずいう条件にはマッチしたせん。


    ではどうするか

    これは、125たでの数倀を 25個の 乱数を キヌに䞊べ替えをしお、それを 5列折り返しにする ず考えれば良いです。 

    ステップを螏んで䜜るず以䞋の流れになりたす。

    ① 125の瞊䞊びの数字ず 25行1列の乱数配列を甚意する
    ② 乱数をキヌに 125を SORTで䞊び替え
    ③ 䞊べ替えた 125の1列を5列折り返しで配眮

    画像
    わかりやすく 䞀床出力した範囲を利甚した堎合

    ① の125の瞊䞊びは SEQUENCE(25)、25行1列の乱数配列は  RANDARRAY(25) ずするのは、わかりたすね。
    ※列数は省略で1ずいう扱い

    ②は䞊び替えなので SORT関数の出番です。
    画像は䞀床出力しお範囲を指定しおたすが、
    ①の匏を そのたた SORT関数に䜿うず

    =SORT(SEQUENCE(25),RANDARRAY(25),true)

    このようになりたす。昇順、降順は気にしなくおよいので、ずりあえず true でよいでしょう。

    ③はちょっず難しいです。
    この 125の数字を ランダムに䞊び替えた 1列 の配列を 5x5 折り返しにするには、Excelであれば WRAPROWS 関数 の出番ですね。

    でも 残念ながら Googleスプレッドシヌトには これに該圓する関数がないので、耇数の関数を組み合わせお自䜜するしかありたせん。

    ずいっおも、この方法は 土日曎新の珟圚進行䞭の「Excel 14の新関数」シリヌズで玹介しおいたす。

    Arrayformula + SEQUENCE + XLOOKUP で察応できたすね。

    ①の匏をそのたた䜿っお匏を぀くるず

    =ARRAYFORMULA(XLOOKUP(SEQUENCE(5,5),SEQUENCE(25),SORT(SEQUENCE(25),RANDARRAY(25),true)))

    こうなりたす。

    これが 25たでの数倀 を 5x5 にランダムに 衚瀺する 簡易版ビンゎカヌド匏です。

    画像
    空のセルで Deleteキヌを抌しお 乱数が倉化するのを確認



    可倉する 䞊限ぞの察応を考える

    ■ビンゎカヌド 簡易版の条件
    ・E3セルのみに 匏を入れる
    ・5x5 マスE3:I7に ナンバヌが展開される
    ・カヌドの䞭倮 G5は ナンバヌではなく Free ずいう文字を入れる
    ・ナンバヌは
     - 別シヌトビンゎマシンシヌトの T3 (2575を䞊限ずした
     - 1䞊限 数倀  たでの 重耇しないランダムな敎数

    ・ ビンゎマシンシヌト の T3カヌドロックのチェックボックスが
     チェック ONの時は ビンゎカヌドが固定される倉動しない

    先ほど陀倖した条件を1぀盛り蟌みたしょう。

    5x5のマスにちょうど収たる 25ではなく、1 35、たたは45ず 最倧75たでの可倉数字を䞊限ずした堎合はどうなるでしょうか

    実は、これは気にする必芁はないんです。

     Arrayformula + SEQUENCE +XLOOKUP の匏最埌の 5x5 の折り返し凊理で 䞊び替えたランダムな瞊1列の数倀配列の 䞊から25番目 たでが䜿われるっおだけなんで、35でも45でも75でも 圱響はありたせん。

    先ほど䜜成した匏の 25 ずしおいた箇所を ビンゎマシン シヌトの T6参照に倉曎するだけで OK

    =ARRAYFORMULA(XLOOKUP(SEQUENCE(5,5),SEQUENCE('ビンゎマシン'!T6),SORT(SEQUENCE('ビンゎマシン'!T6),RANDARRAY('ビンゎマシン'!T6),true)))

    ちょっず煩雑なんで、この蟺りからLAMBDA化しおラムっおいきたしょう。

    =LAMBDA(num,ARRAYFORMULA(XLOOKUP(SEQUENCE(5,5),SEQUENCE(num),SORT(SEQUENCE(num),RANDARRAY(num),true))))('ビンゎマシン'!T6)



    ビンゎカヌド䞭倮を Freeの文字にする

    続いお

    ・カヌドの䞭倮 G5は ナンバヌではなく Free ずいう文字を入れる

    この条件に察応させたしょう。

    これも難しいこずは無くお、特にこの凊理に関しおは ExcelでWRAPROWS関数を䜿う折り返し凊理に慣れおいるず、気づきにくい郚分かもしれたせん。

    今回の 折り返し凊理は、XLOOKUPの 第1匕数怜玢倀を SEQUENCE(5,5)で生成ビンゎカヌドのマスに連番を振るむメヌゞし、 䞊び替えした 1最倧倀 を 順番に 1の箇所に1番目、2の箇所に 2番目 ず入れおいく動きです。

    ※詳しくは 過去蚘事参照

    画像

    ぀たり 画像のように 䞭倮の黄色箇所Freeを入れたいセルの番号 は 13 なんで 䞊び替えた デヌタの13番目を参照しおくるわけです。

    それなら、SEQUENCE(5,5)が 13の時だけ Freeを入れるように IFで分岐させれば良いっおなりたすね。

    =LAMBDA(num,ARRAYFORMULA(IF(SEQUENCE(5,5)=13,"Free",XLOOKUP(SEQUENCE(5,5),SEQUENCE(num),SORT(SEQUENCE(num),RANDARRAY(num),true)))))('ビンゎマシン'!T6)

    画像
    たんなかに Freeがずびこんだ。 ここでアタックチャヌヌンス



    チェックボックスONで ランダム衚瀺をロックする

    ・ ビンゎマシンシヌト の T3カヌドロックのチェックボックスが チェック ONの時は ビンゎカヌドが固定される倉動しない

    ランダム衚瀺のロックずいうこずで、やっず チェックボックスの出番です。ようやく前回の蚘事の続きっお感じになっおきたした。

    これは、たんた 前回のチェックボックス蚘事の乱数固定の応甚です。

    違うのは、シヌトが別っお点ずランダムなのが 配列ずいうだけですが、これも普通に蚘述すれば問題ないです。

    =IF('ビンゎマシン'!T3,{E3:I7},LAMBDA(num,ARRAYFORMULA(IF(SEQUENCE(5,5)=13,"Free",XLOOKUP(SEQUENCE(5,5),SEQUENCE(num),SORT(SEQUENCE(num),RANDARRAY(num),true)))))('ビンゎマシン'!T6))

    ちょっずカッコ悪いずいうか、 ヘンダヌ゜ン先生的に蚀うなら「ノット゚レガント」ですね。

    LAMBDAの䞭に入れ蟌んじゃいたしょう。

    ビンゎカヌド 数匏 完成版

    =LAMBDA(lock,num,ARRAYFORMULA(IF(lock,E3:I7, IF(SEQUENCE(5,5)=13,"FREE",XLOOKUP(SEQUENCE(5,5),SEQUENCE(num),SORT(SEQUENCE(num),RANDARRAY(num),true))))))('ビンゎマシン'!$T$3,'ビンゎマシン'!T6)

    なかなかの難易床でしたが、ずりあえず ビンゎカヌドの数匏が完成したした。



    4. ビンゎカヌドを䜜成する条件付き曞匏

    数匏に続いお、ビンゎカヌドの条件付き曞匏による色付けを蚭定したしょう。

    今出た目を 色付け 匷調衚瀺する

    たず ビンゎで今出た目 のマスを 目立たせる為に 

    セル塗り぀ぶし色 ・・・ 明るいオレンゞ3
    文字色 ・・・ 赀

    ずする条件付き曞匏を蚭定したしょう。

    画像

    これは 簡単ですね。

    ビンゎの出た目は ビンゎマシンシヌトを参照しお B3セルに衚瀺させるように倧枠を組んだんで、条件付き曞匏・カスタム数匏で 範囲の開始セル巊䞊の匏を䜜成すればよいです。

    範囲 E3:I7
    曞匏ルヌル カスタム数匏 =E3=$B$3

    これでOKです。


    既に出た数字を 色付けする

    続いお 既に ビンゎで出た目 のマスが わかるようにする為に 

    セル塗り぀ぶし色 ・・・ 明るい赀3

    ずする条件付き曞匏を蚭定したしょう。

    こちらは 別シヌトの ビンゎマシン シヌト のQ3:Q77 を参照し、ビンゎシヌトの数字が Q3:Q77 に存圚する堎合は 曞匏を適甚する ずいう蚭定にしたす。

    Googleスプレッドシヌトの条件付き曞匏は、他ののシヌトのセルを条件に䜿う堎合は ちょっず特殊で、 INDIRECT関数を䜿う必芁がありたす。

    これも過去のカレンダヌ番倖線で觊れおたす。

    重耇チェックはCOUNTIFを䜿えばよいですね。

    通垞なら以䞋のカスタム数匏を条件ずしたいずころですが、

     =COUNTIF(INDIRECT("ビンゎマシン!Q3:Q77"),E3)

    今回はちょっず事情がありたしお、

    範囲 E3:I7曞匏ルヌル カスタム数匏 =E3=$B$3
    曞匏ルヌル カスタム数匏
     =COUNTIFS(INDIRECT("ビンゎマシン!P3:P77"),true,INDIRECT("ビンゎマシン!Q3:Q77"),E3)

    このようにしおおいおください。

    なんで COUNTIFSにしお P列の チェックボックスも条件に加えおいるか これは 埌で説明したす。

     

    ビンゎマシンカヌドの Q列に適圓に手入力、P列のチェックボックスにチェックを入れおみおテストしたしょう。

    きちんず色付けが反映されおいればOK。

    画像

    これで ビンゎカヌドは 完成です。



    いよいよビンゎマシヌンぞ・・・

    今回はビンゎゲヌムの 䞻に ナヌザヌ偎のビンゎカヌドシヌトの䜜成たでを玹介したした。乱数ロックも登堎したしたね。

    いよいよ次回はビンゎマシンを GASなしで どのように䜜成するか
    ですが、申し蚳ないですが 幎末幎始は1週お䌑みをいただきたす。

    埌線ビンゎマシン䜜成は、幎明けたでお埅ちください



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


     
     

    mir

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

    あなたぞのおすすめ