エクセルを使っていて、データを検索・抽出しようとする際、困ったことはありませんか?
1件だけ抽出できればいいのであれば、VLOOKUP関数(HLOOKUP関数・MATCH関数)等でまかなえますが、一致するデータが複数ある時(重複データ検索)は、標準のEXCEL関数では最初の1件のみ抽出して終わってしまいます。
解決法としては、「オートフィルタ」を用いて該当データを探ることとなるのですが、行をたたんでの表示となる故、体裁として自由度のあるものではありませんでした。
何とか、関数を用いて重複データをスマートに抽出できないかと思い、ユーザー定義関数(VBAによる自作関数)での作成を試みました。
その結果
GxMatch
GDxVlookup
GDxHlookup
が生まれたわけです。
しかし、上記の関数には欠点があります。これらの関数を使えば使うほど重複するデータをその都度探しに行くため、処理が重くなってしまうことです。重複するデータを探す処理は1回だけにとどめられれば良いのですが、関数の性質上そうもいきませんでした。
この問題を解決するにあたり、処理の分割(関数を分割)してみました。
① 重複するデータの位置を累積して、テキストとして書き出すユーザー定義関数
AcuMatch
② ①により書き出されたテキスト(CSVカンマ区切り)を基にし、それを配列として読み込 み表示させるユーザー定義関数
CSVVLookup
CSVChoose
AcuMatchの結果を表示させる作業用セルとして、1つセルを使うことになりますが、処理は単純化されたと思います。
-
検索値に該当するデータを累積検索し、その位置や値(データ)を抽出する関数群(一括処理型モジュールのため、重くなりがち)
-
GxMatch GDxVlookup GDxHlookup MutVlookup
GxMatch(何番目, 条件, 検索範囲)
検索範囲からn番目に発見された検索値(条件)の位置を返す関数 何番目:複数該当する値が存在する際の「何個目」の位置をとりだすか。 |
GDxVlookup(n番目,検索値,検索範囲,検索値の存在する列,抽出列,<抽出形式>,<エラー除去>)
検索範囲からn番目に発見された検索値の位置にある値を返す関数 n番目:複数該当する値が存在する際の「何個目」の位置をとりだすか。 |
GDxHlookup(n番目,検索値,検索範囲,検索値の存在する行,抽出行,<抽出形式>,<エラー除去>)
検索範囲からn番目に発見された検索値の位置にある値を返す関数 GDxVlookup 関数の、行と列を入れ替えて作成したものです。 |
MutVlookup(n番目,検索値,検索範囲,抽出列,<抽出形式>,<エラー除去>)
GDxVlookupのモジュールを用いて、いままで単一列(単一レコード)のみの検索検索)であったものを、検索範囲中からすべて拾い上げるようにしたもの n番目:複数該当する値が存在する際の「何個目」の位置をとりだすか。 |
-
選択範囲のデータをカンマ区切りのデータとして書き出す関数群
-
AcuMatch ListUP ArrayUP
AcuMatch(SrcStr , BoundAR,〈hyoujikeitai〉,〈offsetval〉 )
条件に見合う検索値の存在する位置を抽出し、カンマ区切りで書き出す(重複データ検索)オプションにて位置ではなく、データとして抽出可にした。旧AcuMatch の機能拡張版 オプション①変更 2015.2.15 行と列の相対表示書出し追加 条件(SrcStr):検索するデータ(値)[条件には aa* 等のワイルドカードも使用可] |
ListUP(選択範囲 , 〈件数〉,〈isnul〉)
検索範囲(BoundAR)中に存在する重複データは1つにまとめ、リストとしてCSV形式(「,」区切り)のテキストデータとして書き出す(重複データ割愛・まるめ検索2014.12.18 オプション②〈isnul〉追加 空白データ(セル)は詰めて書き出すかのオプション オプション①True時は、その件数を表示します |
ArrayUP(検索範囲, 〈件数 〉)
検索範囲(BoundAR)中に存在するデータをすべて、(重複データもまるめずに)リストとしてCSV形式(「,」区切り)のテキストデータとして書き出す(配列検索) オプションTrue時は、その件数を表示します |
-
上記AcuMatch,ListUP,ArrayUPにより書き出されたカンマ区切りのテキストデータを配列として読み込み、表示する関数群
-
CSVVLookup CSVChoose CSVCount
CSVVLookup(n番目,配列値,対象範囲,<対象列>,<エラー除去>)
カンマ区切りのテキストデータの配列を読み込み、その配列に見合う値を指定した範囲から抽出するもの n番目(banme):複数該当する値が存在する際の「何個目」の位置をとりだすか。 |
CSVChoose(n番目,配列値,<エラー除去>)
カンマ区切りのテキストデータの配列を読み込み、その配列中のn番目を抽出する n番目:複数該当する値が存在する際の「何個目」の位置をとりだすか。 |
CSVCount(テキストデータ)
カンマ区切りのテキストデータの個数(件数)を表示 テキストデータ(CSVData):CSV形式(カンマ区切り)のテキストデータ(値)または存在するセル番地。 |
ダウンロードはこちら⇒ RuisekikensakuBOX Ver5.0Plus.zip
フリーソフトです。Zip形式ですが、解凍すると、xlsの標準エクセルファイルとなります。(アドイン形式ではありません)
使う際には、ご自分のエクセルBOOKのVBEの「標準モジュール」-「Module1」等に本コードをコピペしてお使いください。