• ベストアンサー

excelで重複せずランダムに複数文字列を抽出

はじめまして。 excelでA列(A1~AX)に入力されているX個の文字列から 「重複せず、ランダムに」3つを抽出し、その3つの文字列を結合した物を B列のB1~BXに表示させる方法について、アドバイスをお願い致します。 A1:test1 A2:test2 ・・・ AX:testX ★B1~BXを以下のように入力したいです。 B1:test33,test25,test77 B2:test9,test3,test98 ・・・ BX:test3,test77,test24 以上、よろしくお願い致します。

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

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

No.2・3です! たびたびごめんなさい。 前回はセル数が3で割り切れない場合ばかり重視していたため、 3で割り切れるセル数の時はちゃんと表示できないと思います。 No.2の画像の配置通りとして、C1セルの数式を下記に変更してみてください。 =IF(ROW()<=INT(COUNTA(B:B)/3),INDEX(B:B,MATCH(LARGE(A:A,3*(ROW()-1)+1),A:A,0))&","&INDEX(B:B,MATCH(LARGE(A:A,3*(ROW()-1)+2),A:A,0))&","&INDEX(B:B,MATCH(LARGE(A:A,3*(ROW()-1)+3),A:A,0)),IF(ROW()=INT(COUNTA(B:B)/3)+1,IF(MOD(COUNTA(B:B),3)=1,INDEX(B:B,MATCH(MIN(A:A),A:A,0)),IF(MOD(COUNTA(B:B),3)=2,INDEX(B:B,MATCH(SMALL(A:A,2),A:A,0))&","&INDEX(B:B,MATCH(MIN(A:A),A:A,0)),"")),"")) 何度も失礼しました。m(_ _)m

その他の回答 (4)

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

重複しない組み合わせということでかなり難しいことになるでしょう。 次のようにして最後にはご自分の操作で決めていただくのはどうでしょう。 初めにA2セルから下方に文字列が入力されているとします。 B列に組み合わせを表示させることにしてそのための作業列をC,D,E,F列に設けます。 D2セルには次の式を入力してF2セルまでドラッグコピーしたのちに下方にもドラッグコピーします。 =IF($A2="","",RAND()) その後にB2セルには次の式を入力し下方にドラッグコピーします。 =IF(A2="","",INDEX(A$2:A$100,RANK(D2,D:D,0))&","&INDEX(A$2:A$100,RANK(E2,E:E,0))&",,"&INDEX(A$2:A$100,RANK(F2,F:F,0))) 1文字列と2文字列の間には , が付きますが2文字目と3文字目の間には ,, が付きます。 次にB列での文字列の組み合わせに重複があるかどうかを判定するためにC2セルには次の式を入力して下方にドラッグコピーします。 =IF(A2="","",IF(IF(LEN(B2)-LEN(SUBSTITUTE(B2,MID(B2,1,FIND(",",B2)-1),""))>LEN(MID(B2,1,FIND(",",B2)-1)),1,0)+IF(LEN(B2)-LEN(SUBSTITUTE(B2,MID(B2,FIND(",",B2)+1,FIND(",,",B2)-1-FIND(",",B2)),""))>LEN(MID(B2,FIND(",",B2)+1,FIND(",,",B2)-1-FIND(",",B2))),1,0)+IF(LEN(B2)-LEN(SUBSTITUTE(B2,MID(B2,FIND(",,",B2)+2,100),""))>LEN(MID(B2,FIND(",,",B2)+2,100)),1,0)>1,1,"")) またC1セルには次の式を入力します。 =IF(SUM(C2:C100)=0,"成功","F9キーを押す") F9キーを押すことで組み合わせが変化します。C1セルに成功の文字が表示された時点でF9キーを押すことをやめます。 その時点でB列に表示された組み合わせがお求めの組み合わせとなります。

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

No.2です。 画像をアップするのを忘れていました。 どうも失礼しました。m(_ _)m

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

こんにちは! 一例です。 無理やり関数でやってみました。 かなり長い数式になってしまいましたが・・・ ↓の画像のようにA列を挿入し作業用の列としています。 A1セルに =RAND() という数式を入れフィルハンドルでダブルクリック(またはオートフィルで下へコピー) そしてC1セルに =IF(INT(COUNTA(B:B)/3)+1<ROW(),"",IF(ROW()<=INT(COUNTA(B:B))/3,INDEX(B:B,MATCH(LARGE(A:A,3*(ROW()-1)+1),A:A,0))&","&INDEX(B:B,MATCH(LARGE(A:A,3*(ROW()-1)+2),A:A,0))&","&INDEX(B:B,MATCH(LARGE(A:A,3*(ROW()-1)+3),A:A,0)),IF(MOD(COUNTA(B:B),3)=1,INDEX(B:B,MATCH(MIN(A:A),A:A,0)),INDEX(B:B,MATCH(SMALL(A:A,2),A:A,0))&","&INDEX(B:B,MATCH(MIN(A:A),A:A,0))))) という数式を入れオートフィルで下へコピーしています。 これでF9キーを押すたびにランダムに表示されると思います。m(_ _)m

回答No.1

ココに紹介されている。 ただし、リストの形式は異なる。 組合せ ― 組合せ nCr の配列を返す(再帰使用)、RetMax=TRueの時は組合せ数を返す http://hp.vector.co.jp/authors/VA033788/kowaza.html#0002 ~~~ '一行目(A1,B1,C1,...)に元データ、 A2に組合せに使用するデータ数、 A3以降に組合せを表示する

関連するQ&A