リストボックスのリストでは同一名称のアイテムを機能させれないか?

Question 51.3 Previous Next
500連発第2弾の397番「複数列のリストボックスにデータソースを設定する」を応用したいのですが、データーソースの表が問題になるのかと思いますが具体例で質問します。
データーソースの表 お試しマクロの「H9」セルのりんごをメロンに変えた場合、リストボックス内にはコード100のメロンと、コード200のメロンがあることになります。
この状態でコード200のメロンを選択した場合、反転がはじかれコード100のメロンを 選択するしか方法がなくなります。

モジュール内の「intViewCol = 2」で1か3に変更すればお試しマクロ内での問題は解決しますが、こうゆう取得したい列に重複するデーターがある場合どうしたらよいのでしょうか。 私が作成しているデーターソースは何百行もあるため一気にはじかれてしまいます。 どうか解決方法を教えて下さい。

第1弾も買っています。それと第3弾の発売楽しみにしています。お忙しいと思いますが何卒宜しくお願いします。
Answer   Copyright (C) 2002.1.11 永井善王
詳細は こちら 500連発をご活用いただきありがとうございます。397番のサンプルは昆野憲一氏の作品です。
その内容は、
リストボックスのリストに 3列で構成されたデータを表示しておいて、ユーザーによって選択されたら、2列目のデータを取得する仕組みになっています。3列も表示する理由は、ユーザーに参考情報を提供して選択しやすくするためです。

メロンはメロン
複数列のリストボックスでコントロールのデータソースとして有効なのは、特定の列だけであると思います。
つまり、コード100のメロンも、コード200のメロンも、メロンはメロンであり、リストに1つあれば十分と言えるでしょう。コードはあくまで参考情報と思います。よって、それを敢えて区別したいならば、「メロン100」、「メロン200」というようにユニーク(1つしかない状態)にしておく必要があるでしょう。

397番のマクロコードでは、あらかじめ
Const intViewCol = 2        '何列目をデータとしてセットするか指定
と Constステートメントで宣言しておいた定数 2を次のようにして
    .BoundColumn = intViewCol   '※何列目をデータとしてセットするか
リストボックスの BoundColumnプロパティ(データソース)の値として設定しています。
「intViewCol = 2」を 1か 3に変更すれば問題が解決するのは、1列目のコードも、3列目の単価もユニークだからであり、あなたが改造した 2列目はユニークでないからと言えるでしょう。

ユニークにする方法
ユニークにしたリストボックス 例えば、上図のシート名を "元シート"とするなら、
 1. それを別のワークシート "新シート"にコピーする
 2. 新シートの H9セルに数式「=元シート!H9 & 元シート!G9」を入力
   するかマクロを使って文字列連結する
 3. 新シートの H列の以下のセルも同様にする
方法などで実現できます。

しかし、何百行もあるデーターソースとのことですから、この方法を使ってもユニークにできないならば、データの持ち方を工夫するか、あるいは、重複を取り除くマクロを作成する必要が出るでしょう。
チャレンジしてみてください。

 

Excel VBA Macro