コンボボックスとシリアライズ

エクセルバカ相手の低レベルな余興ネタである。Excelのコンボボックス程度でこんな大げさなことをしても意味はないが、頭の体操には手頃である。

「シリアライズ」とは、簡単にいえば、コンボボックスに設定するデータをファイルに保存して、起動時にそれを読み込んでコンボボックスに設定し、終了時にそれをファイルに書き戻すということである。

コンボボックスの項目に変更(削除、追加、書き換え)があった場合に、終了時にそのデータの状態をファイルに保存し、次回起動時には終了時の状態を再現する。MFCなどの言い方では「コンボボックスのシリアライズ」「シリアライズ可能なコンボボックス」ということにでもなろうか。これと同じことはリストボックスにも通用する。

これはMFCで作るコンボボックスやリストボックスなどのコントロールでは普通にやっていることである。MFCのようにコンボボックスにもシリアライズの機能が組み込める場合はそんなに面倒なことではない。

しかし、そういう機能がないExcel/VBAでは少し苦労する。費用対効果があまりにもアンバランスでヤル気がしない。面倒なだけでExcel程度では実際的な使い道がほとんどないと思われるからである。しかし、ここでは一応そういう「経験」をしておくのも悪くはないだろう。

まず、このパターンの原型になる「単一列コンボボックス」(いわゆる普通のコンボボックス)の場合である。
このコンボボックスでは、最初はデータがなくてもかまわない。自分で入力していったものがデータになる。また、以前のデータがファイルとして残っていればそれを読み込んで初期データとして表示する。


動作と操作

コンボボックスは一つのデータ(アイテム)を選択するという点では機能的にはラジオボタン(オプションボタン)やチェックボックスと同じである。しかし、それらとの大きな相違点は省スペースでそれが実現できるという点である。

以下はこのフォームの簡単な解説である。と同時にこれはリストボックスにも共通することでもある。
  1. このコンボボックスで使うデータファイル(*.dat)がある場合
    そのファイルのデータを読み込んで起動する。

  2. このコンボボックスで使うデータファイル(*.dat)がない場合
    コンボボックスは空白のまま起動する。その後に、以下の手順でデータを設定していけばよい。


ComboFlexible1.frm@Controls1.xlsm

項目の新規追加
コンボボックスのエディットエリア、すなわち「編集可能なコンボボックス」と表示されている部分に書き込んだものをリストの末尾に追加する。
この追加の方法は単一列コンボボックスだからこのような仕様にしている(複数列の場合はこのようなことはできない)。
現在選択している項目のインデックス(0起算)がコンボボックスの右上に表示される。

表示データの削除
コンボボックスのエディットエリアに表示されているデータを削除する。

全データの削除
コンボボックスのデータをすべて削除する。


確認
コンボボックスで隠れているリスト部分のデータを表示する。

書換
「設定位置(0起算)」に書き換える項目のインデックスを指定する。
「設定する項目名」に新規に書き換えるデータを指定する。
たとえば「2」にすると上から3番目の項目が指定したデータに変更される。

挿入
「設定位置(0起算)」に挿入する項目のインデックスを指定する。
「設定する項目名」に新規に挿入するデータを指定する。
たとえば「3」にすると上から4番目の位置に指定したデータが挿入される。追加前にあった4番目の項目は5番目にずれる。

設定を保存して終了
変更したデータが保存されてこのダイアログが終了する。
これに対して右上の「×」で終了すると変更したデータは保存されずに単純に終了する。


実用性

一応はやってみたものの、こういうものの実用性はやはり少ない。これはコンボボックスをメモ帳のようにして使っているのとほとんど同じである。コンボボックスに書かれた(収納された)テキスト自体に意味があるという場合にしか使用価値はないからである。

実際のプログラムでは、こういうパターンでコンボボックスやリストボックスを使うことはまずないだろう1)。単に、何かをするときのパラメーターを取得するための手段(取得した値には意味はない)としてしか使わないからである。ということは実用価値はほとんどないということになる(笑)。
NOTE
1) コンボボックスで選択した文字列をセルに入力するなどの場合にしか用途はないような気がする。


単一列コンボボックスとシリアライズ(exc_0102)

- 2017/04/02 -


複数列コンボボックスとシリアライズ

動作や操作は基本的には単一列コンボボックスと同じである。

しかし、複数列コンボボックスの場合は、各項目には複数個の種類が異なるデータがあるが、コンボボックスのエディットエリア、すなわち「編集可能な複数列コンボボックス」と表示されている部分に先頭の1つのデータしか表示されない。

この点で、単一列コンボホックストは操作が少し異なる。コンボボックスのエディットエリア、すなわち「編集可能な複数列コンボボックス」の部分に入力したものを末尾に追加していくことはできない。これ以外はほぼ操作は同じである。

単一列コンボボックスとの大きな違いは、コンボボックスへのデータの追加・書換・挿入である。

ComboFlexible2.frm@Controls1.xlsm

新規追加と書換と挿入
「設定項目(カンマで区切る)」に設定する複数個のデータをカンマで区切って書き込む。
たとえば、この例では3列なので「本田真凛,京都,15」というパターンで入力する。

「新規追加」ボタンを押すと末尾に追加していく。この場合は「設定位置(0起算)」の指定は不要。

「書換」ボタンを押すと「設定位置(0起算)」で指定した位置のデータが書き換わる。

「挿入」ボタンを押すと「設定位置(0起算)」で指定した位置にデータが挿入される。それ以後のデータは1つづつ下にずれる。



値の表示
コンボボックスのエディットエリアに表示されている項目の全データ(各列のデータ)を表示する。



複数列コンボボックスとシリアライズ(exc_0103)

- 2017/04/02 -


タコの殿堂