質問: excel 該当セルが複数ある場合にまとめて取得 お世話になります。 excelでvlookupなどて検索した時に、複数の該当セルがあった場合、 一列の文字列にして取得できるワークシート関数はないでしょうか。 例えば、 a| b 1 | aaa 2 | bbb 1 | ccc 4 | ddd 1 | eee などで、「1」の条件に引っかかったものを取得する場合、 「aaa,ccc,eee」などのような結果が得られるワークシート関数です。 vbaで力技で行う方法はできるのですが、できる限りスマートな方法で 行いたいので、ワークシート関数で探しています。 以上、ご指導、何卒よろしくお願いいたします。
回答: 今仮に、元データが存在しているシートはsheet1であり、a列に入力されている条件は全て数値であり、条件や文字列は2行目以下に入力されているものとします。 又、結果はsheet2に表示し、sheet2のa列には全ての条件が順番に並べられた状態で、自動的に表示され、sheet2のb列から右方向に向かって、該当する文字列が自動的に表示される様にするものとします。 まず適当な列(ここでは仮にsheet3のa列とb列とします)を作業列として使用し、sheet3のa1セルに次の数式を入力して下さい。 =if(countif(sheet1!$a$1:index(sheet1!$a:$a,row()),index(sheet1!$a:$a,row()))=1,row(),"") 次に、sheet3のb1セルに次の数式を入力して下さい。 =if(index(sheet1!$a:$a,row())="","",index(sheet1!$a:$a,row())&" ゙"&countif(sheet1!$a$1:index(sheet1!$a:$a,row()),index(sheet1!$a:$a,row()))) 次に、sheet3のa1~b1セルの範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。 次に、sheet2のa1セルに次の数式を入力して下さい。 =if(rows($1:1)>count(sheet3!$a:$a),"",index(sheet1!$a:$a,small(sheet3!$a:$a,rows($1:1)))) 次に、sheet2のb2セルに次の数式を入力して下さい。 =if(or(sheet2!$a2="",columns($b:b)>countif(sheet1!$a:$a,sheet2!$a2)),"",index(sheet1!$b:$b,match(sheet2!$a2&" ゙"&columns($b:b),sheet3!$b:$b,0))) 次に、sheet2のa1セルをコピーして、sheet2のa2セルに貼り付けて下さい。 次に、sheet2のa2~b2の範囲をコピーして、同じ列の3行目以下に貼り付けて下さい。 次に、sheet2のb列全体をコピーして、c列から右方向に向かって貼り付けて下さい。 これで、sheet1のa列に入力されている全ての条件が、重複無しに自動的に並べられると共に、該当る文字列が、その右側に並べて表示されます。