「StiLL」 デザイン情報298 開発 -- リストボックスで複数の選択を行う考え方のご紹介
                             
  【テーマ】
リストボックスの使用時に選択肢の中から複数を選択したいと思ったことはありませんか?
今回はその考え方・方法をご紹介します。
    【方法】
リストボックスで選択したときのNoから選択肢を求め、それを選択肢の並びの列に(セル値セット「BtSetValue」)ボタンで保存することで複数選択を実現する仕組みを構築できます。
    【参考】
選択結果はExcel等の関数で集約表示できます。
StiLLで用意されているシステムテンプレート(STILLAUTO)を利用することでリストボックスの選択(ワンクリック)のみで一連の処理を自動化できます。
 
                 
                             
■ 今回の内容                          
リストボックスで複数の選択を可能にする方法についてご紹介いたします。
基本的にリストボックスで選択肢を選択すると、その選択肢のNoが指定したセルに出力されます。
リストボックスに用意されたコントロールの書式設定ダイアログには複数選択のラジオボタンがありますが通常の状態では機能しません。
見かけ上の表示は複数選択された状態となりますが選択肢のNoはセルに出力されません。
↓複数選択時の見かけ上の表示   ↓コントロールの書式設定ダイアログ
そこで考え方としては、単一選択の状態で取得したNoから選択肢の内容を遂次保存していく方法を仕組化します。
・ポイント
 1.リストボックスは単一選択で使用します。
 2.出力した選択肢のNoから選択肢を求め隣接する列の同じ行にコピーすることで複数選択を可能とします。
■ ボタンの作成と設定                        
今回使用するリストボックスを示します。(リボン - StiLL - ボタンテンプレート-開発用タブ)
今回の設定例を以下に示します。
・リストボックスの設定
いま下図ような選択肢(A列)と選択肢のNoの出力先セル(F2)を準備します。
ここにリストボックスを配置します。(赤枠)
※C列の囲み範囲を選択肢の保存先とします。
下図のように選択肢の範囲とNoの出力先セル位置を設定します。
また以下のセルに選択肢の内容と出力先を求める数式を設定します。
セルF3:="Sheet1!C"&F2
     ・セルF2に出力されるA列の行を用いてC列のコピー先を求めます。
セルF4:=IF(INDEX(C:C,F2)="",INDEX(A:A,F2),"")
     ・この数式はC列に値がない場合(未選択)はA列の値をセットし、既に値がある場合(選択済)は空白で初期化することで、
     一度選択したものを解除できる機能を持った数式としています。
・(セル値セット「BtSetValue」)ボタンの設定 [Sheet1に配置]
ボタンの対象範囲を(セルの値を参照)にしてセルF3を設定します。
セット値も同様に(セルの値を参照)にしてセルF4を設定します。(下図参照)
リストボックスで選択後にこのボタンを実行することで、次々に選択結果が積み上げられ、複数選択が可能となります。
■ ご参考までに                        
1. 選択した結果は以下の関数の設定で集約できます。
  集約したものを表示することで、選択されている状態を示すことが出来ます。
  例1:TEXTJOIN関数 ⇒ Office365、Excel2019以上で使用できます
      =TEXTJOIN(",",TRUE,Sheet1!C2:C9) ・・・ 選択結果をカンマで繋げます
  例2:S_Connect関数 ⇒ StiLLで標準添付されている関数です
      =S_Connect(C2:C9,",") ・・・ 同様に選択結果をカンマで繋げます
  りんご なし かき を選択した場合は例1、2ともに以下のようになります。
  集約結果:りんご,なし,かき
  上記以外にも CONCATENATE関数などのExcel関数で集約できます。詳細はお調べください。
2. 本例ではリストボックスで選択し、セル値セットボタンで保存する2つのボタン操作となりますが、
  StiLLで用意されているシステムテンプレート(STILLAUTO)を利用することでリストボックスの選択のみで
  一連の処理を自動化できます。
  具体的には(STILLAUTO)の(コンボボックス連動連続ボタン)に上段の(選択/クリア)ボタンをリストします。
  (STILLAUTO)の使用例の詳細は以下バックナンバーの 「PushStiLL」の項目をご覧ください。
【Excelメールサービス バックナンバー064】 「StiLL-X」
  なお、リストボックスはスクロール時にもイベントを発生して、(選択/クリア)ボタンが実行されます。
  この対策として、下図のような(セル値セット「BtSetValue」)ボタン(No 初期化)を作成して、セルF2 に 1 をセットします。
  このボタンを上記の(コンボボックス連動連続ボタン)の2番目にリストすることで不要な選択/クリアを防ぐことができます。
     ↓(No 初期化)ボタンの設定例 [Sheet1に配置]
     ↓コンボボックス連動連続ボタンの設定例 [STILLAUTOにあるボタン]
(各ボタンの設定内容の詳細はStiLLヘルプをご確認ください)  
Copyright(C) アイエルアイ総合研究所 無断転載を禁じます