• ベストアンサー

エクセル 行にある項目を抽出

間違えて他のカテゴリーで質問してしまいました。 そちらは閉めましたので改めてこちらで質問させてください。 エクセルで下記のような表から項目を抽出したいのですが うまくいきません A列 りんご みかん りんご ぶどう みかん と入力されていて任意のセルに、A列に入力されている項目から 重複分を除き抽出したいです 具体的には任意セルに「りんご、みかん、ぶどう」と抽出したいのです。 フィルタオプションを利用し、抽出することはできました。 また、それをマクロ登録すれば、A列に追加項目があっても 自動変更できるという、回答も頂き、確かにできたのですが、 このエクセルから、ハイパーリンクでワードへ飛ばしたり、 いろいろと込み入っているため、できれば、 マクロではなく、関数利用をしたいのですが、 どのような関数を利用すればよいのかわかりません。 ご存知でしたら、ご教示お願いいたします。

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

  • ベストアンサー
  • maron--5
  • ベストアンサー率36% (321/877)
回答No.2

     A      B 1   りんご    りんご 2   みかん   みかん 3   りんご   ぶどう 4   ぶどう 5   みかん B1=IF(ROW(A1)>COUNT(INDEX(1/(MATCH($A$1:$A$10,$A$1:$A$10,)=ROW($A$1:$A$10)),)),"",INDEX(A:A,SMALL(INDEX(SUBSTITUTE((MATCH($A$1:$A$10&"",$A$1:$A$10&"",)=ROW($1:$10))*($A$1:$A$10<>""),0,10^5)*ROW($1:$10),0),ROW(A1)))) ★下にコピー

tennsei
質問者

お礼

すごい!できました!! ありがとうございます。 でも・・・ビギナーの私には、この関数が読み解けません。 ROWというものを使ったことがありませんでした。 もう少し研究して、これを読み解きたいと思います。

その他の回答 (3)

noname#204879
noname#204879
回答No.4

「ビギナー」の方のために、    A   B 1 りんご 1 2 みかん 2 3 りんご 4 ぶどう 4 5 みかん B1: =IF(COUNTIF(A$1:A1,A1)=1,ROW(A1),"") 「任意セル」に次式を入力して、此れを下方にズズーッと複写 =IF(ISERROR(SMALL(B$1:B$5,ROW(A1))),"",INDEX(A$1:A$5,SMALL(B$1:B$5,ROW(A1))))

tennsei
質問者

お礼

ありがとうございました! できました。 しかも、私の読み解けそうな関数で・・・助かりました!

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.3

ユーザー定義関数を作成する方法でやってみました。 1)表を開いたら[Alt]+[F11] 2)左上のプロジェクトエクスプローラーの「VBAProject(ブック名)」を右クリック   [挿入]→[標準モジュール] 3)右側に広く表示されたソースエディタに下記コードを貼りつける Function getUniq(myRange As Range, dlmtr As String) As String Dim sStr() As String ReDim sStr(myRange.Count, 1) As String Dim sIdx As Integer Dim sIdxC As Integer Dim rCell For Each rCell In myRange sIdxC = sIdxC + 1 If rCell.Value <> "" Then sStr(sIdxC, 0) = dlmtr sStr(sIdxC, 1) = rCell.Value For sIdx = 1 To sIdxC - 1 If sStr(sIdx, 1) = rCell.Value Then sStr(sIdxC, 0) = "" sStr(sIdxC, 1) = "" Exit For End If Next Next sStr(1, 0) = "" getUniq = "" For sIdx = 1 To myRange.Count getUniq = getUniq & sStr(sIdx, 0) & sStr(sIdx, 1) Next End Function これで関数「getuniq」が使えるようになります。 表で、抽出結果を入れたいセルに=getuniq(セル範囲,区切り記号)を入れると抽出した文字列を区切り記号で区切りながら結合したものを入れてくれます。 たとえばご質問の例でしたら =getuniq(A1:A5,":") を入れると、「りんご:みかん:ぶどう」を返してくれます。 もちろん ":" の代わりに "、" を入れると「りんご、みかん、ぶどう」が返ります。 範囲は同一列でなくても B2:D50 といった指定でも可能です。 ご参考になれば。

tennsei
質問者

お礼

何度もご回答いただきありがとうございました。 が・・・。うまくいきませんでした。 でも、すごそうな関数ですね。簡単にできてしまいそうです。 悔しいけれど、ソースエディタ貼り付けの部分で 手間取ってしまいました。 もう少し修行を積んでから再チャレンジします。 普通に登録されている関数以外にも、追加できる、ということを 初めて知りました。ありがとうございます。

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.1

> 任意セルに「りんご、みかん、ぶどう」と抽出したいのです。 1)1つのセルに句点"、"で区切って抽出したい、ということですか。 それとも 2)1項目1セルに入れるのですか。 2)の場合、出力セルはどのように考えればいいですか。 たとえばB1セルから下方に隙間なく表示されるようにしたいとか言うことでしょうか。

tennsei
質問者

お礼

説明が足りず申し訳ありません 最終的には、1)のように、句点で区切って1つのセルに出したいのですが、 無理なようでしたら、2)のように列方向へ一旦出して それを必要なセルで「&"、"」という形でつなごうかと考えています。

関連するQ&A