メインコンテンツへスキップ
見出し画像

【QuickTips 07】GASなしで選択回数制限のあるプルダウンリストを作る

    シンプルでちょっと便利な Quick Tips。マガジンにまとめていきます。
    ※今回は1500文字を少しオーバーしています



    プルダウンでの選択を制限したい

    Googleスプレッドシートで 選択回数を制限したプルダウンの作る方法を紹介します。

    画像

    👆選択済みのものをプルダウンで表示させない(選択できなくする)方法や

    画像

    👆選択肢ごとに選べる回数を指定したプルダウンを作ることができます。

    もちろん GAS無しです!



    1. 一番簡単な1回だけ選択できるプルダウン

    まずは一番簡単な作り方を見ていきましょう。ただしこの方法は残念な点があります。



    1-1. 数式と設定方法

    画像

    =LET(pd,B2:B5,list,D2:D5,FILTER(list,COUNTIF(pd,list)=0))

    1回だけ選択できるプルダウンを作る為には、選択肢にリスト範囲(list, D2:D5)をそのまま使うのではなく、プルダウン範囲(pd, B2:B5)を使って FILTER + COUNTIF の数式で、まだ選択されていない値を出力したセル範囲をプルダウン(範囲内)に指定します。

    核となるのはCOUNTIF関数

    画像

    FILTER関数内はARRAYFORMULA関数使用時と同じように、内部では配列処理が出来るようになります。

    COUNTIF(pd,list)

    は各フルーツがプルダウン範囲に幾つあるか?を配列で返しており、プルダウンで選択すると1とカウントされているのがわかりますね。

    これを条件に使って、FILTER関数で 0(1回も選ばれてないもの)だけを出力すればOK

    あとはメニューから、

    挿入 > プルダウン で、

    画像

    プルダウン(範囲内)で、数式のスピル範囲 E2:E5を指定すれば完成です。

    簡単ですね。



    1-2. 【注意点】選択したプルダウンのセルで無効の通知が

    画像

    ただ、この方法だと 👆 プルダウンを選択したセルに 

    「指定した範囲内の値を入力してください」

    と警告が出てしまいます。

    「みかん」が、選択範囲から消えてしまった為です。

    エラー表示が出るだけなんで、気にしないならこのまま使うのもアリですが・・・



    2. エラー表示が出ない1回だけ選択できるプルダウン

    これを回避したいという場合は、プルダウン毎に選択肢範囲を用意するしかありません。

    画像

    ただ、これも数式1つ プルダウン設定1回で解決できます。



    2-1. 「エラーが出ない」数式と設定方法

    画像

    =LET(pd,B2:B7,list,D2:D5,x,FILTER(list,COUNTIF(pd,list)=0),
     MAP(pd,LAMBDA(v,TOROW({v;x},3))))

    👆これを実現する式がこちら。

    前半は1の式とほぼ一緒。違うのはFILTERの結果を xと置くところ。

    ここから pdをMAP関数で1つずつ v(個々のプルダウン)として取り出し、xの上に連結

    {v;x}

    これをTOROW関数で横方向にするついでに第2引数の 3指定で空白とエラーを無視(左に詰める)とします。

    これで vが空白(プルダウン未選択)、FILTERの結果が#N/Aエラーに対処しています。

    TOROW({v;x},3)

    画像

    ※GoogleスプレッドシートはMAPで配列ネストが可能です

    プルダウンの範囲設定は、

    画像

    プルダウンと同じ行を 相対参照させたいので、一番上のリスト範囲 E2:H2 を選択してから 頭に = を付けます。

    ※ = をつけることで相対参照となります

    画像

    これでエラー表示が出ない1回限定プルダウンが実装できました。



    3. 選べる回数を指定したプルダウの作り方

    画像

    最後に応用で選択肢ごとの選べる回数(在庫数)を指定したプルダウンの作り方です。


    3-1. 数式と設定方法

    画像

    =LET(pd,B2:B7,list,D2:D5,n,E2:E5,
     x,FILTER(list,n-COUNTIF(pd,list)),
     MAP(pd,LAMBDA(v,TOROW({v;x},3))))

    式はほぼ一緒です。

    在庫数の列 n から COUNTIFの結果(選択した数)を引いてFILTER関数の条件とすればOK。※0はFALSEとみなされます

    選択数の列を用意して、その値を使ってもOK

    プルダウンの設定方法も2-1と一緒です。

    これで選択回数を制限したプルダウンも作れますね!



    今回のQucik Tipsの関連 note

    👇プルダウン機能をまとめたマガジン(連動プルダウンの作り方や複数選択プルダウン考察も)

    👇その他の今回登場した関数のnote


     
     

    mir

     
     
    元Excel職人・VBA使いから、Googleスプレッドシート職人・GAS使いにジョブチェンジ。謎解き感覚で お題(課題)を解決していくような記事を書こうかなと。その他、AIやらGeminiやらGoogleWorkspaceネタ全般

    あなたへのおすすめ