• ベストアンサー

EXCELで並んでいるデータ内で重複したものを省く方法

りんご みかん おれんじ おれんじ ぶどう おれんじ みかん とあるものを隣の列に りんご みかん おれんじ ぶどう と表示させたいのですが、 EXCELの関数で行う方法はないでしょうか?

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

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.5

こんばんは。 >違うシートにあるデータでもできるのでしょうか? もちろん、式のほうも、フィルタオプションのほうも、どちらも出来ます。 まず、式のほうです。 これは、ご存知ですか? 私の良く使う手ですが、{Altキー}を押しながら、「式」をドラッグして、{シート・タブ}まで来ると、その選択したシートに「式」もいっしょについていきます。 次に、「フィルタ・オプション」のほうですが、ちょっと、間違いやすいです。 1.最初に、ペーストする側のシートを開けます。 2.ペーストする場所にセルポインターを持ってきてきて、   メニューの[データ]-[フィルタ]-[フィルタ・オプション] 3.リスト範囲で、元(ソース)のデータの範囲を選択します。 4.「○指定した範囲」にチェックを入れます。 5.三段目の   「抽出範囲」に、一つセルを選択します。(多くを選択するとエラーが返ることがあります。)  例えば、「A1」  にマスウポインタを当てます。 6.レ 重複するレコードは無視する にチェックを入れてください。 7.[OK]をクリックします。 これで完成です。このフィルタ・オプションのすばらしいのは、1万のデータの中からでも、一瞬で、ユニーク(唯一)なデータを抽出してきます。 なお、関数のほうは、Excel2000以下ですと、5,500個ぐらいのデータより多いと、エラーになることがあります。

April8
質問者

お礼

お礼が遅くなり申し訳ありません。 これこそ私が求めていた方法です! (^0^) 早速試して見ます。 わかりやすくご丁寧な回答ありがとうございました。

その他の回答 (4)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんばんは。 関数で行うと、以下のような式だけで、フィルコピーすれば、出てきます。 作業列は要りません。 =IF(SUM((MATCH($A$1:$A$6,$A$1:$A$6,0)=ROW($A$1:$A$6))*1)<ROW(A1),"",INDEX($A$1:$A$6,SMALL(IF(MATCH($A$1:$A$6,$A$1:$A$6,0)=ROW($A$1:$A$6),ROW($A$1:$A$6),""),ROW(A1)),) 配列数式ですから、一旦式を入力したら、目的の式にF2を押して、『ShiftとCtrlを押しながらEnterキー』を押すようにしてください。式が、{ } で囲まれます。 なお、これは、メニューの[データ]-[フィルタ]-[フィルタ・オプション]の「重複するレコードは無視する」というオプションで、一気に出来ます。

April8
質問者

お礼

ご回答ありがとうございます! いろいろ関数を組み合わせないといけないかなと思ってたので、一発でできるとは驚きました。 違うシートにあるデータでもできるのでしょうか? 早速試してみます(^^)

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.3

何度も回答してますが Sheet2の A2から下にデータがあるとして B2に=IF(COUNTIF($A$2:A2,A2)=1,MAX($B$1:B1)+1,"") と入れて下方向に複写します。 これで初出のものの行に、上行から1から順に連番を振れます。 別シートSheet3にいって A2に=OFFSET(Sheet2!$A$2,MATCH(ROW()-1,Sheet2!$B$1:$B$10,0)-2,0) と入れて下方向に式を複写します。

April8
質問者

お礼

ご回答ありがとうございました。 やりたいことひとつをとっても、 いろいろな方法があるのですね。 実際に試してみます(^^)

  • oosaki
  • ベストアンサー率48% (88/183)
回答No.2

仮にセルA1にデータがあるとしたら隣接セルB1に次式を入力します。 =IF(IF(A1=0,0,IF(COUNTIF($A$1:A1,A1)>1,0,1)),A1,"") 上記式のA1とは対象データの開始位置(セル)ですので、ご自身のデータにあわせてA1を変えて下さい。あとはオートフィルでコピー、セルB1の値は重複しない値になると思われます。

April8
質問者

お礼

ご回答ありがとうございました。 今回は関数のみで行いたいのです。 確かにそれぞれ単体のデータでの抽出はできるのですが、 並べるにはオートフィルを使用しなければならないので 今回は使用することが出来ませんでした。 質問内容があいまいで申し訳ありません。

回答No.1

こんばんは。 元データが A列にあり、抽出は B列だとします。 ■作業列を使う方法です。 F列を作業列にします。(作業列はどの列でもかまいません) データが1行目から始まっているとすれば、 F1に↓ ----------------------------------- =IF(COUNTIF($A$1:A1,A1)=1,ROW(),"") ----------------------------------- ◆1行目以外から始まっている場合(または、元データが A列以外の場合)は、セル位置を変更してください。 上の数式を A列のデータ最終行までコピーしてください。 A列のデータが今後も増えるのなら、予想される A列の最大行までコピーしてください。 A500 あたりまでデータが入るだろうと思えば、F500までコピー。 B1に↓ -------------------------------------------------------- =IF(COUNT(F:F)<ROW(A1),"",INDEX(A:A,SMALL(F:F,ROW(A1)))) -------------------------------------------------------- ◆元データが A列以外なら A:A をその列記号に変更してください。 ◆作業列が F列以外なら、F:F(2ヶ所)を、その列記号に変更してください。 ◆データが1行目以外から始まっている場合でも、ROW(A1)の A1 はそのままにしておいてください。 この数式を、必要分(重複を除いた実数以上)下にフィルコピー。 実数がわからなければ、適当に(多めに)コピーしておいてください。 作業列が目障りなら非表示にしてください。

April8
質問者

お礼

実はこれからさらに派生して、 違うシートにある部分をマージしなければならないのです。 INDEX関数は使用したことがないのですが、 こんな使い方ができるのですね。 チャレンジしてみます。 ご回答ありがとうございました。

関連するQ&A

専門家に質問してみよう