[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『複数列で重複しないデータを抽出する関数』(もか)
Excelには『重複の削除』という機能がありますが、これはデータが一列の場合の時でないと使えません。
A列に
1 2 2 3 4 5 7 8
B列に
3 4 5 6 7 8 9 1
と、入っている時に、C列に
1 2 3 4 5 7 8 6 9
を関数を使用して表示させることはできないでしょうか?
※データ数が日々異なるので、A:A、B:Bを範囲指定して検索したいです。
※C列に表示されるデータの順序は問いません。
※作業列を使用しても構いません。
※C列には空白行が無いように表示したいです。
よろしくお願いします。
< 使用 Excel:Excel2007、使用 OS:Windows7 >
データが「数値」なら、順番に並べればいいと思います。
(1) C1セル =MIN(A:B)
(2) C2セル =IF(C1="","",IFERROR(SMALL(A:B,COUNTIF(A:B,"<="&C1)+1),"")) 下にコピー
<結果図> 行 _A_ _B_ _C_ 1 1 3 0 2 2 4 1 3 2 5 2 4 3 6 3 5 4 7 4 6 5 8 5 7 7 9 6 8 8 1 7 9 0 7.5 10 7.5 8 11 9
(半平太) 2017/03/25(土) 12:50
>ただ、データは数値ではなく、文字と数値と記号の組み合わせとなっています。
具体的なサンプルを提示してください。(また勘違いするといけないので)
(半平太) 2017/03/25(土) 15:58
そもそも、
>これはデータが一列の場合の時でないと使えません。
ここの認識に疑問。 まぁ、データ見てみないとですが。 (コナミ) 2017/03/25(土) 19:23
また、『重複の削除』については、実際にデータが入っている範囲や列を指定して行ってみたのですが、
重複の値があるにも関わらず「重複がない」と返されてしまったり、「削除されました」と表示されるにも関わらず、実際セルに入っている数値は何も変わらないという結果でした。
(複数列を1列にまとめれば、『重複の削除』が使用できるのですが、先ほど申し上げましたように、それぞれの列に表示される値が日々異なるため、複数列のデータを一列にまとめる作業を省きたいと考えています。)
(もか) 2017/03/26(日) 00:15
別に本当のデータをそのまま出すのではなく、数値なら数値、文字列なら文字列で 架空のデータに置き換えたらいいんですよ。 最初みたいに、実際は数値・文字列・記号の組み合わせなのに数値だけで 例を出されると使える式や方法が変わってきてしまうので。 例えば、「25X-A」みたいに最初が数値2桁で文字列と文字列をハイフンでつないで いるとか、規則性があるならそれを説明していくつか例をだしてもらえば 回答側もそれに沿って考えられます。 (コナミ) 2017/03/26(日) 06:43
「全て文字型」で「中間に空白セルが無い状態のデータ」で数式を考えてみましたが、 それでもかなり面倒でした。(私の能力では)
数百行程度なら多分大丈夫だと思いますが、 データ量が多くなると重くてしょうがなくなるかも知れません。(単なる勘ですけど)
「データ数が日々異なる」と言っても、実際、最多でどのくらいの行数になるのか、その目安が知りたい。
・・と言うかマクロで処理すれば、幾らあっても造作ないことなんですけど、その選択肢はないのですか?
(半平太) 2017/03/26(日) 10:17
※英文字と数字が「-(ハイフン)」で繋げられています。
※桁数はデータにより異なり、各データに入るハイフンの数もデータ毎に異なります。
※データ内の英文字と数字の並びは、データにより異なり、ランダムです。
(英文字○個、ハイフン、数字○個、ハイフン・・・というような規則性はありません。)
※データの頭は必ず英文字です。
可能であれば、関数を使用したいです。
データの数は、各列で30行〜40行程度の場合が多いです。
よろしくお願いします。
(もか) 2017/03/26(日) 10:36
>データの数は、各列で30行〜40行程度の場合が多いです。
これなら、A列の分をD列の1〜100行、B列の分をD列の101〜200行に(数式で)転記すれば簡単にできそう。
ちょっと待っていてください。
(半平太) 2017/03/26(日) 11:30
(1) C1セル =INDEX(D:D,SMALL(INDEX((MATCH(D$1:D$200,D$1:D$200,0)<>ROW(Z$1:Z$200))*1000+ROW(Z$1:Z$200),0),ROW(Z1)))&"" (2) D1セル =IF(INDEX(A:B,ROW()-100*(100<ROW()),1+(100<ROW()))&""="",D$1,INDEX(A:B,ROW()-100*(100<ROW()),1+(100<ROW()))&"")
それぞれ、下にフィルコピー
<結果図> 行 __A__ __B__ __C__ __D__ 1 A-001 Z-1 A-001 A-001 2 A-002 Z-2 A-002 A-002 3 A-003 A-002 A-003 A-003 4 A-004 A-003 A-004 A-004 5 A-002 A-004 A-007 A-002 6 A-003 A-002 A-008 A-003 7 A-007 Z-7 a-98 A-007 8 A-008 Z-1 Z-200 A-008 9 a-98 Z-9 Z-1 a-98 10 Z-200 Z-10 Z-2 Z-200 11 z-200 Z-7 A-001 12 Z-9 A-001 13 Z-10 A-001 14 A-001 : : : : : 200行下まで
(半平太) 2017/03/26(日) 11:49
関数は素人ですが、2列限定なら
C1 : =IF(ROW(A1)<=COUNTA(A:A)+COUNTA(B:B),IF(ROW(A1)<=COUNTA(A:A),A1,INDEX(B:B,ROW(A1)-COUNTA(A:A))),"") これを下にフィルコピーした上で、C列を値変換し重複の削除を行ってもできました。
並び順は、よくわからないので必要なら並び替え操作。
(β) 2017/03/28(火) 09:17
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.