• ベストアンサー

エクセルで組合せを求めたい

A列B列にa~Zまでの任意一文字が5000行まで入力されているとします。 たとえば A1=a、B1=b A2=y、B2=z などと入力されていると仮定してください。5000行もあるので、A列B列が同じ組合せが出現します。 この組合せが同じ行を検索したいのですが、厄介な条件があって(a、b)の組合せと(b、a)は同じ組合せと見なしたいのです。 どなたかご教示下さい。

質問者が選んだベストアンサー

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.3

こんばんは! 直接の回答にはならないと思いますが、一案として・・・ 他の方の補足に >実際のデータは先頭がアルファベット1文字でその後ろに数字4文字の5桁なのです。 とありましたので一例ですが↓のように作業用の列を設けてみてはどうでしょうか? 2列作業列を設けています。 作業列C2セルに =IF(A2<B2,A2&B2,B2&A2) D2セルに =IF(COUNTIF($C$2:C2,C2)=1,ROW(),"") として、C・D2セルを範囲指定し、E2セルのフィルハンドルでダブルクリック。 (D列が空白の行が重複していることになります) そしてF2セルに =IF(COUNT($D:$D)<ROW(A1),"",INDEX(A:A,SMALL($D:$D,ROW(A1)))) という数式を入れ列方向と行方向にオートフィルでコピーすると 画像のようにF・G列に重複なしに元データが表示されます。 直接の解決方法にはならないと思いますが、 今後のたたき台になれば良いのですが・・・m(__)m

hanatareru
質問者

お礼

ありがとうございます。 いまひとつ、分からない。

その他の回答 (4)

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.5

No.3・4です! またまたお邪魔します。 >DFG列の意味がよく分かりません。 とありますので、これが余計なお世話だったかもしれませんね。 F・G列にA・B列の重複なしに表示するために、D・F・G列を使っただけで 必要なかったらこの列は無視してください。 最初の質問にある >組合せが同じ行を検索したいのですが・・・ の趣旨から外れた回答になってしまったようです。 何度も失礼しました。m(__)m

hanatareru
質問者

お礼

本当に助かりました!ありがとうございます。 これでXXを抑止するための一次的な材料を準備することができます。 16年も放置していた大問題を解決できるかもしれません! 抑止・解決が無理でも把握は出来るようになると思います。 No.1・2さん。 私の説明がつたなくて大変申し訳ありませんでした。ごめん。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.4

No.3です! 画像がうまくアップできなかったようなのでもう一度トライしてみます。 もし、今回もダメな場合のときのために一応補足しておきます。 元データはA・B列の2行目以降に入っていて、作業列をC・D列にしています。 そして、F2セルに前回の数式を入れ、となりのG2セルまでコピーし F2・G2セルを範囲指定したまま下へずぃ~~~!っとオートフィルでコピーしています。 どうも何度もごめんなさいね。m(__)m

hanatareru
質問者

お礼

わざわざすみません。 DFG列の意味がよく分かりません。 でも、C列ができればなんとかなりそうです。 用は「&」で接続する際に大小を判定し、大小に応じて「&」の要素をひっくり返す。 なるほどです。 その後の出現回数についての、処理は何とかなりそうです。

  • KURUMITO
  • ベストアンサー率42% (1835/4283)
回答No.2

次のように作業列を作って対応すればよいでしょう。 A列およびB列のデータは2行目から下方に入力されているとします。 C2セルには次の式を入力します。 =IF(A2="","",IF(CODE(A2)<=CODE(B2),A2&B2,B2&A2)) D1セルには重複検索とかの文字を入れてD2セルには次の式を入力します。 =IF(C2="","",IF(AND(COUNTIF(C:C,C2)>1,COUNTIF(C$2:C2,C2)=1),INT(MAX(D$1:D1))+1,IF(AND(COUNTIF(C:C,C2)>1,COUNTIF(C$2:C2,C2)>1),INDEX(D$1:D1,MATCH(C2,C:C,0))+COUNTIF(C$2:C2,C2)/10000,""))) C2およびD1セルを選択してからそれらの式を下方にオートフィルドラッグします。 その後にD1セルを選択してから「並べ替えとフィルタ」から「フィルタ」を選択します。 D1セルの▼をクリックして「昇順」を選択することで複数行にダブりがある行が整理されて上段に並びます。D列に数値のないセルはダブりのデータが無い場合で下段に並びます。

hanatareru
質問者

お礼

ありがとうございます。 やってみます。

hanatareru
質問者

補足

やってみたのですが、二つ目の関数で小数点以下がでてきたり、辻褄の合わない数字が返されてきます。 それと、申し訳ありません。 質問を簡素化するために、a・bなどと表現してしまったのですが、実際のデータは先頭がアルファベット1文字でその後ろに数字4文字の5桁なのです。 ごめんなさい。説明が上手くないないもので‥ そんな訳で、一つ目の関数もダメなんです。

  • MackyNo1
  • ベストアンサー率53% (1521/2850)
回答No.1

1行目に項目名があり2行目からデータが乳威力されているなら、以下のような数式を使ったフィルタオプションの設定を利用するのが簡単かもしれません。 空白セル(例えばE2セル)に以下の数式を入力し、「データ」「フィルタ」「フィルタオプションの設定」を選択し(2007なら「詳細設定」をクリック)、検索条件範囲にE1:E2セル(E1セルは空白セル)を選択してOKしてください(必要ならそのデータを適当な範囲に抽出する)。 =SUMPRODUCT((A2&B2=$A$1:$A$100&$B$2:$B$5000)+(B2&A2=$A$2:$A$5000&$B$2:$B$5000))>1

hanatareru
質問者

お礼

ありがとうございます。 トライしてみます。

関連するQ&A