質問: excel、ランダム表示の発展系? excelのsheet1には a列にサイトタイトル、b列にurl、c列にカテゴリのデータがあるとします。 そして、d列には「=if(b2="","",rand())」このようなランダムの関数があります。 また、sheet2のa列には =if(row(a1)>count(sheet1!$d:$d),"",index(sheet1!$a:$b,match(large(sheet1!$d$2:indirect("sheet1!d"&count(sheet1!$d:$d)+1),row(a1)),sheet1!$d:$d,0),column(a1))) b列には =if(row(b1)>count(sheet1!$d:$d),"",index(sheet1!$a:$b,match(large(sheet1!$d$2:indirect("sheet1!d"&count(sheet1!$d:$d)+1),row(b1)),sheet1!$d:$d,0),column(b1))) がa2,b2~a6,b6の5行に書かれています。 すると、sheet2のa2,b2~a6,b6にはランダムに表示されます。 (以前教えてもらった方法です) そこで今回の質問ですが2つあります。 1つ目は、c列のカテゴリを指定して、その中からランダムに表示させたい。 2つ目は、同じドメインは表示しないようにしたい。 ちょっと、分かり難いかもしれませんが、このようにするにはどうすればいいでしょうか? 恐れ入りますが、教えていただけないでしょうか? よろしくお願いします。
回答: >、「同じドメインは表示しないようにする」これがどうも上手くいかないようです。 申し訳御座いません、少々考え方を間違えていた処が御座いましたので、ano.1の「同じドメインは表示しないようにしたい場合」と「同じドメインは表示しないようにした上で、c列のカテゴリを指定して、その中からランダムに表示させる場合」の関数は忘れて下さい。 ●同じドメインは表示しない様にした上で、ランダムに表示させる場合 まず、sheet1のd2セルに次の関数を入力してから、sheet1のd2セルをコピーして、sheet1のd3以下に貼り付けて下さい。 =if(isnumber(find("@",$b2)),rand(),"") 次に、sheet1のi1セルに次の関数を入力して下さい。 =if(rows($1:1)>count($d:$d),"",if(isnumber(find("@",index($b:$b,match(large($d:$d,rows($1:1)),$d:$d,0)))),replace(index($b:$b,match(large($d:$d,rows($1:1)),$d:$d,0)),1,find("@",index($b:$b,match(large($d:$d,rows($1:1)),$d:$d,0))),),"")) 次に、sheet1のj1セルに次の関数を入力して下さい。 =if(or($i1="",countif($i$1:$i1,$i1)>1),"",large($d:$d,rows($1:1))) 次に、sheet1のi1~j1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 次に、sheet2のa2セルに入力する関数を、次の様に変更してから、sheet2のa2セルをコピーして、sheet2のa2~「b列の最下段のセル」の範囲に貼り付けて下さい。 =if(rows($2:2)>count(sheet1!$j:$j),"",index(sheet1!a:a,match(large(sheet1!$j:$j,rows($2:2)),sheet1!$d:$d,0))) ●同じドメインは表示しないようにした上で、c列のカテゴリを指定して、その中からランダムに表示させる場合 今仮に、指定するカテゴリー名をsheet1のe1セルに入力するものとします。 まず、sheet1のe2セルに次の関数を入力してから、sheet1のe2セルをコピーして、sheet1のe3以下に貼り付けて下さい。(「c列のカテゴリを指定して、その中からランダムに表示させたい」の場合のsheet1!e2セルと同じ関数) =if($c2=$e$1,rand(),"") 次に、sheet1のg1セルに次の関数を入力して下さい。 =if(rows($1:1)>count($e:$e),"",if(isnumber(find("@",index($b:$b,match(large($e:$e,rows($1:1)),$e:$e,0)))),replace(index($b:$b,match(large($e:$e,rows($1:1)),$e:$e,0)),1,find("@",index($b:$b,match(large($e:$e,rows($1:1)),$e:$e,0))),),"")) 次に、sheet1のh1セルに次の関数を入力して下さい。 =if(or($g1="",countif($g$1:$g1,$g1)>1),"",large($e:$e,rows($1:1))) 次に、sheet1のg1~h1の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 次に、sheet2のa2セルに入力する関数を、次の様に変更してから、sheet2のa2セルをコピーして、sheet2のa2~「b列の最下段のセル」の範囲に貼り付けて下さい。 =if(rows($2:2)>count(sheet1!$h:$h),"",index(sheet1!a:a,match(large(sheet1!$h:$h,rows($2:2)),sheet1!$e:$e,0))) 以上です。