プロが教えるわが家の防犯対策術!

はじめまして。

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

以上、よろしくお願い致します。

A 回答 (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
    • good
    • 0

重複しない組み合わせということでかなり難しいことになるでしょう。


次のようにして最後にはご自分の操作で決めていただくのはどうでしょう。
初めに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列に表示された組み合わせがお求めの組み合わせとなります。
    • good
    • 0

No.2です。



画像をアップするのを忘れていました。
どうも失礼しました。m(_ _)m
「excelで重複せずランダムに複数文字列」の回答画像3
    • good
    • 0

こんにちは!


一例です。

無理やり関数でやってみました。
かなり長い数式になってしまいましたが・・・

↓の画像のように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
    • good
    • 0

ココに紹介されている。


ただし、リストの形式は異なる。

組合せ ― 組合せ nCr の配列を返す(再帰使用)、RetMax=TRueの時は組合せ数を返す
http://hp.vector.co.jp/authors/VA033788/kowaza.h …
~~~
'一行目(A1,B1,C1,...)に元データ、
A2に組合せに使用するデータ数、
A3以降に組合せを表示する
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!