一時的に抽出して今後はその機能は使わないのか、それともワークシートに組み込んで常時使用するのか、マクロで抽出するのか等、どのような目的で使うかによって方針は多岐に渡ります。
様々な方法が有りますが今回は最も簡単に組み込めて、その後も自動計算でリアルタイムに抽出が出来るように文末に関数として組み込んで常時重複を削除したデータを集めるシートのサンプルを作成したので参考にしてみてください。
先ずはサンプルをExcelに読み込んでください。*** 開始 ***の直下の行から*** 終了 ***の直上の行までを範囲選択してコピーしてメモ帳などに貼り付けてから、test.slk等の拡張子をslkにした適当なファイル名で保存してください。これで数式を含むサンプルシート(ブック)が出来上がりますので、このファイルをダブルクリック等でExcelに読み込んでください。
巧く読み込めたら、以下の解説を読んで参考にしてください。
A1~C12までは元データ、E1~E12は重複を検査するための作業用セル、G1~I12は重複していないデータその物を除いた=唯一1回しかデータ中に存在しないデータです。
★E1~E12の解説
B列のデータからを自分自身を除くB列のセルからMatch関数で一致を検出します。自分が4行目ならば1行目~3行目、5行目~11行目までをチェックします。同じデータが見つからない場合はMatch関数はエラーを返しますので、エラーの状況をチェックして一致が無い場合は項目の番行(行)を、一致する物が有った(重複が有った)場合は実際のデータとして出現しない様な最大の数値=10^99等をセットします。
10^99を、例えば10000+A列とかにすれば、排除ではなく抽出した一覧の最後の方に付け加える事も可能です。
★G1~G12までの解説
先程E1~E12で検査した数値をSmall関数を使って小さい順にソートします。これで重複があったデータ番号は最大の数値になっていますのでSmall関数の最大値として下の方に弾き飛ばされます。番号順なので元データの出現順に並びますから、前の項で説明した様な並び替えや大きい順等も可能です。
★H1~I12の解説
G列で検出しソートした番号をオフセットとしてOffset関数を使って元データのテーブルからデータ群を拾ってきます。F14~I14は抽出したい列の番号ですが、これは後々列を挿入した時に不便をしないための配慮なので、その可能性が無ければ無理にセル上に置く事も無いので直接関数の中に置いてしまっても構いません。
なお、各関数の説明はExcelのHelpで確認してください。お役に立てれば幸いです。これ以外にも方法は沢山有りますが、色々と弄ってみると、もっと色々と試す事が出来ると思います。
以下を切り取ってtest.slk等のファイル名で保存してください。サンプルファイルが出来ます。
*** 開始 ***
ID;PWXL;N;E
C;Y1;X1;K"元のデータ"
C;X5;K"検査処理"
C;X7;K"重複データを含まない抽出後のデータ"
C;Y2;X1;K"番号"
C;X2;K"項目"
C;X3;K"数量"
C;X5;K"重複検査値"
C;X7;K"番号"
C;X8;K"項目"
C;X9;K"数量"
C;Y3;X1;K1;E1
C;X2;K"a"
C;X3;K100
C;X5;K1E+99;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K2;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K"bb";EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K200;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y4;X1;K2;ER[-1]C+1
C;X2;K"bb"
C;X3;K200
C;X5;K2;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K3;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K"c";EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K500;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y5;X1;K3;ER[-1]C+1
C;X2;K"c"
C;X3;K500
C;X5;K3;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K5;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K"dd";EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K444;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y6;X1;K4;ER[-1]C+1
C;X2;K"d"
C;X3;K10
C;X5;K1E+99;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K6;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K"b";EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K666;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y7;X1;K5;ER[-1]C+1
C;X2;K"dd"
C;X3;K444
C;X5;K5;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K9;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K"fff";EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K99;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y8;X1;K6;ER[-1]C+1
C;X2;K"b"
C;X3;K666
C;X5;K6;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K10;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K"h";EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K55;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y9;X1;K7;ER[-1]C+1
C;X2;K"d"
C;X3;K77
C;X5;K1E+99;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K1E+99;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y10;X1;K8;ER[-1]C+1
C;X2;K"a"
C;X3;K88
C;X5;K1E+99;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K1E+99;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y11;X1;K9;ER[-1]C+1
C;X2;K"fff"
C;X3;K99
C;X5;K9;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K1E+99;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y12;X1;K10;ER[-1]C+1
C;X2;K"h"
C;X3;K55
C;X5;K10;EIF(AND(ISERROR(MATCH(RC[-3],R[+1]C[-3]:R13C2,0)),ISERROR(MATCH(RC[-3],R2C2:R[-1]C[-3],0))),RC[-4],10^99)
C;X7;K1E+99;ESMALL(R3C5:R12C5,RC[-6])
C;X8;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;X9;K0;EIF(RC7>10^98,0,OFFSET(R2C1,RC7,R14C))
C;Y14;X6;K"列オフセット"
C;X7;K0
C;X8;K1;ERC[-1]+1
C;X9;K2;ERC[-1]+1
E
*** 終了 ***
===補足===
返信&Bestを頂き、有難うございました。色々と工夫をしながら弄ってみれば更に要求に応じた巧い改造も出来るかと思いますので頑張ってみてください。