エクセル初級者向け 重複データの削除方法と新たなデータの作成法

このQ&Aのポイント
  • エクセルを使っている初級者のための、重複データの削除方法を紹介します。同じセルに複数の重複データがある場合、重複しないデータを抽出して新しいセルに入れる方法を解説します。
  • 重複データの区切り方はセミコロン、パイプ区切り、空白、改行が混在している場合でも対応できます。新しいセルでのデータ区切りはコンマかパイプ区切りを選ぶことができます。
  • 手作業でデータを処理する必要があり、マクロについての知識は必要ありません。エクセル初級者でも簡単に実践できる方法を紹介します。
回答を見る
  • ベストアンサー

エクセル教えてください 重複データの削除方法

エクセルは良く使っていますが、レベルは初級の上です。 同一セル内に複数の重複データが入っていますが、重複しないものを抽出し 新しいセルに入れたいと思っています。 重複データの区切りは、セミコロン";" パイプ区切り"|",空白、改行が混在しています。 重複しないものを、新しいセルに入れたいのですが、どのようにしたら良いでしょうか? 新しいセルでのデータ区切りは、コンマ(又はパイプ区切り)にしたいと思っています。   例で説明します。 A列(番号) B列(元のデータ)             C列(重複を除いたデータ)  1      タイ ベトナム 中国|タイ|タイ         タイ,ベトナム,中国    2      インド ベトナム|インド タイ |インド 中国  インド,ベトナム,タイ,中国 ※B列のデータを重複を除いて、C列に入れたいと思っています ※2行のデータを例にしましたが、実際には2万くらいデータがあります ※マクロは全くわからないので、多少の手作業があっても関数レベルで やれると助かります。(いまから、マクロを勉強してもよいでしょうか??) 良い方法をアドバイスいただければ助かります。

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

  • ベストアンサー
noname#204879
noname#204879
回答No.3

Sheet2 において、 1.セル A1 に次式を入力して、此れを下方にズズーッとドラッグ&ペースト   =SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(Sheet1!B1,CHAR(10)," "),"|"," "),";"," ") 2.列A全体を選択して、[コピー]→[値の貼り付け]を実行 3.列A全体を選択したままで、[データ]→[区切り位置]を実行 4.カンマやタブなどの…に区切られたデータ”に目玉を入れて、[次へ] 5.“スペース”および“連続した区切り文字…扱う”にチェックを入れて、[完了] Sheet3 において、 6.セル A1 に次式を入力して、此れを下方および右方にズズーッとドラッグ&ペースト   =IF(COUNTIF(Sheet2!$A1:A1,Sheet2!A1)=1,Sheet2!A1,0)   何処まで右に?   全セルのデータが 0 になる列までネ(此処ではそれを仮に列Eとしておく) 7.列A~E全体を選択したままで、[編集]→[ジャンプ]→[セル選択]を実行 8.“数式”に目玉を入れ、かつ、その配下の“数値”だけにチェックを残して[OK] 9.数値 0 の全セルが選択状態になるので、そのままの状態で[編集]→[削除]を実行 10.“左方向にシフト”に目玉を入れて「エイヤッ!」と Enterキーを叩き付け

yotalo
質問者

お礼

ありがとうございます。これなら操作の流れがわかりました。 操作手順10以下が途中で切れているように思えますが、 後は何とか、目的は果たせそうです。 特に6に相当する操作が思いつかなかったので、助かりました。

その他の回答 (3)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.4

#3さんと同様にデータ/区切り位置で元データを複数列に分解します。 このデータがB列からG列にあるとします。H列は空にしておきます。 2行目の例では、I列に =IF(H2="",C2,IF(ISERROR(FIND(C2,H2)),H2&","&C2,H2)) という式を入れて、右方、下方にずずっと、十分な数だけコピーします。多すぎても問題ありませんが、不足はNGです。 最終列にお望みのデータが得られると思います。ご参考まで。 なお、#1のkeithinさんと同様の方法で、但しユーザー定義式で無くてループを回して一発でやってみました。一旦配列に取り込む高速化の技は取り入れていますが、2万行を当方の環境(Core i5 3.2GHz,xl2010)で、600ミリ秒前後で処理できました。 要するにVBAを用いると、1秒かからずに処理できますよと、誘惑しています。 ※replace関数を複数回用いる方法と、Midで切り出して、","に変換してMidで書き戻す方法を試してみましたが、replace関数を用いる方が高速でした。(これが検証してみたかっただけです...)

yotalo
質問者

お礼

ありがとうございます。追加の工夫の部分、トライしてみます。 スキルがあると、VBAでは1秒弱でできるというのは、確かに誘惑です。 VBAを作るところに∞秒かかるので、先に進めず誘惑を味わえないのが残念です。 今回はありがとうございました。また、教えてください。

  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.2

こんばんは! >※マクロは全くわからないので、多少の手作業があっても関数レベルで とありますが、関数で行うとしても結構厄介だと思います。 というコトでお望みでないVBAになってしまいますが、一例です。 データは2行目以降にあるとします。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub Sample1() 'この行から Dim i As Long, k As Long, str As String, buf As String, myArray, tmp Application.ScreenUpdating = False For i = 2 To Cells(Rows.Count, "A").End(xlUp).Row tmp = Cells(i, "B") For k = 1 To Len(tmp) str = StrConv(Mid(tmp, k, 1), vbNarrow) If str = " " Or str = "|" Then tmp = WorksheetFunction.Replace(tmp, k, 1, "*") End If Next k myArray = Split(tmp, "*") For k = 0 To UBound(myArray) If InStr(buf, myArray(k)) = 0 Then buf = buf & myArray(k) & "," End If Next k Cells(i, "C") = Left(buf, Len(buf) - 1) buf = "" Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 関数で簡単にできる方法があればごめんなさいね。m(_ _)m

yotalo
質問者

お礼

せっかく教えていただいたのです、VBAがわからず実行できません。 今回は期限があるので実行できませんが、早く理解できるように なりたいと思いました。 実は初投稿で、こんなに教えていただけたので感激しています。 次回はよろしくお願いいたします

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

次の通りにするだけで出来ます。 手順: ALT+F11を押す 現れた画面で挿入メニューから標準モジュールを挿入する 現れたシートに下記をコピー貼り付ける function myf(target) as string  dim buf as string  dim a as variant, ax as variant  dim mydic as object  set mydic = createobject("Scripting.Dictionary")  on error resume next ’区切り文字を統一する  buf = replace(target, ";", ",")  buf = replace(buf, "|", ",")  buf = replace(buf, " ", " ")  buf = replace(buf, " ", ",")  a = split(buf, ",") ’重複を除いたデータを採取する  for each ax in a   if ax <> "" then mydic(ax) = 1  next ’結果を作成する  myf = join(mydic.keys, ",") end function ファイルメニューから終了してエクセルに戻る 好きな場所、たとえばB列に元データを準備する てきとーなセル、たとえばC1に =myf(B1) と関数を記入する。 以下コピー。

yotalo
質問者

お礼

VBAの基本的なところも説明いただいたのですが、残念ながら、 この説明でもまだVBAが理解できず、例題でも実行できませんでした。 VBAも必須だな、と思いました。これから勉強します。

関連するQ&A

  • 空白セルの削除と重複データの加算のマクロ

    シート1の文字列のデータの0又は空白のセルを取り除いて、並んでいる文字列の左と真ん 中の数が重複しているデーターは左端の数を加算して別のシート2のC10からC100のセルに抽出できるマクロを教えて下さい。データーの0は関数で空白にしたいと思っています。 データの並び方はこのままで重複するデーターの加算と空白のセルの削除を一回のマクロで実行したいのです。  E列               空白を削除    0-4-1              0-4-1         2-3-2              2-3-2         2-2-3              2-2-(3) 0                 2-2-(1) 2-2-1              4-1-9 4-1-9              2-1-7 2-1-7              2-2-3 0                 2-3-(5)                (数式がある空白セル)   2-3-(1)            2-2-3              2-3-(4) 0                 0-4-1 2-3-5 2-3-1 2-3-4 0-4-1 シート2のB列10~100に抽出 0-4-1 2-3-2 2-2-4 4-1-9 2-1-7 2-2-3 2-3-10 0-4-1 このように抽出したいのです。

  • excelの重複データの削除方法。

    excel2003で重複する値を自動的に削除する方法を探しています。 現在、以下のような手順で作業をしています。     A   B   C 1 ○○○ 100 ABC 2 ▼▼▼ 200 DEF 3 ◇◇◇ 300 GHI 4 ■■■ 400 JKL 5 △△△ 500 MNO ↑の元データに      A   B   C 1 ○○● 100 ABC 2 ◇◆◇ 300 GHI ↑のデータを追加(貼り付け)して並び替えをすると      A   B   C 1 ○○○ 100 ABC 2 ○○● 100 ABC 3 ▼▼▼ 200 DEF 4 ◇◇◇ 300 GHI 5 ◇◆◇ 300 GHI 6 ■■■ 400 JKL 7 △△△ 500 MNO というデータが出来るとします。 「C列の値を基準」として、重複している箇所を検出・削除し (上の例で言えば、1・2・4・5の行。)      A   B   C 1 ▼▼▼ 200 DEF 2 ■■■ 400 JKL 3 △△△ 500 MNO というデータにしたいと考えております。 重複した値のどちらか一方を残す、という方法ではなく、 重複した値の全てを削除する、という方法が解りません。 手作業で1つ1つ削除していけばいいのですが、本物のデータは何千件とあるので 手作業では時間が掛かりすぎてしまいますので…。なにかよい方法はないでしょうか? 簡単な方法であれば大変助かりますが、マクロなどを使用する方法でもかまいませんのでご教授下さい。 よろしくお願い致します。

  • excel 抽出およびその数のマクロについて

      A列           B列       C列           (A列の同じ国名を除く)   その数 アメリカ         アメリカ       6 インド          インド ブラジル         ブラジル 中国           中国         6 中国           カンボジア カンボジア        日本         6 日本           ベトナム 中国           シンガポール ベトナム         マレーシア シンガポール       オーストラリア アメリカ         韓国         3 マレーシア        タイ         2 日本           ドイツ 日本 アメリカ オーストラリア 韓国 アメリカ 日本 中国 日本 日本 タイ アメリカ タイ 中国 韓国 韓国 スリランカ 中国 ドイツ アメリカ  A列について同じ国名のセルを除いてB列のようにあらわすにはどのようにすれば良いですか。また、同じ国名の数、たとえばこの場合は「アメリカ」は6(C列)になりますが、これをあらわすにはどのような関数を使用すれば良いでしょうか。ご教示のほどお願いいたします。  上の質問に対して3人の方からご回答をいただきました。(http://okwave.jp/qa/q9068971.html)本当に有り難うございました。感謝しております。  ただ、このような重複削除、そして国数という同じ作業が150ほどあります。いわゆるA、B、C列の3列のまとまりが150ほどあるということです。  A、B、Cでひとまとまり、D、E、Fでひとまとまり、G、H、I、でひとまとまりという感じで、それがA列~PC列くらいまであります(A、D、Gには国名(最高で25くらい)、B、E、Hには重複削除した国名、C、F、Iには国数です)。  一つ一つ手作業で行うのは面倒ですので、マクロで行いたいと思いますが、その組み方を出来ればご教示をお願いしたいと思います。どうぞ宜しくお願いいたします。  

  • エクセルでの重複セルの削除

    こんにちは いつもお世話になっています。 エクセル2003を使っています。 A列に文字列があり、条件付書式で重複データのセルに背景色を付けています。 A列は、ふりがなで昇順でソートしてあります。 条件付書式は数式に =COUNTIF(A:A,A1)>1としています。 B列にはA列の特定セルの行にだけ数字データがあります  A列の特定セルとはA列の重複セルの下側のセルです。 重複データは常に2つだけ出てきます。ソートしてあるのでB列にデータの無いセルが上側に配置されているのだと思います。 例えば、 A    B 事項 該当箇所 (見出しです) 愛知  秋田 秋田 12.23.34. 石川 愛媛 愛媛 5.68.78. (A列の秋田、愛媛のセルの背景色が条件付書式で黄色くなっています) という具合です。 ここで質問ですが、 重複セルの上側のセルだけを削除する方法を教えてください。上の例ではB列にデータの無い秋田、愛媛です。 フィルタオプションで「重複セルを無視する」にチェックをいれても重複セルの下側のセルが無視されてしまいます。また、検索で色つきセルだけを表示しようとしても条件付書式ではできないようです。 わかりにくい説明ですみません。よろしくお願いします。

  • 同一セル内での重複削除

    同一セル内での重複削除 今手元にとあるデータがあります。 そのデータは同一セル内に「○○株式会社/■■印刷/▼▼株式会社/○○株式会社」のように、スラッシュ区切りで会社名が入っています。 このデータから、重複している会社名を削除したいと考えています。上記の例ですと「○○株式会社」が重複していますので、これを削除し「○○株式会社/■■印刷/▼▼株式会社」としたいです。 データが大量にあるので、関数を使用するよりも、マクロを使用した方が時間的にも作業量的にも楽だと思うのですが、いまいちどうやって良いか分かりません。 要約しますと、同一セル内にある重複データを削除するマクロを作れるのか、作れるならばどのようなものか、ということを教えていただきたいと思います。 また、もし削除した際に「・・・・・/」と末尾がスラッシュになった場合、最後のスラッシュだけを削除する方法も教えていただければうれしいです。 ちなみに、会社名の順序に意味はありませんので、重複したデータの1つめを削除するのか、2つめを削除するのかは気にしていません。 どなたかお願いいたします。

  • excel 抽出およびその数について

      A列           B列       C列 (A列の同じ国名を除く) その数 アメリカ         アメリカ       6 インド          インド ブラジル         ブラジル 中国           中国 6 中国           カンボジア カンボジア        日本 6 日本           ベトナム 中国           シンガポール ベトナム         マレーシア シンガポール       オーストラリア アメリカ         韓国         3 マレーシア        タイ    2 日本           ドイツ 日本 アメリカ オーストラリア 韓国 アメリカ 日本 中国 日本 日本 タイ アメリカ タイ 中国 韓国 韓国 スリランカ 中国 ドイツ アメリカ  左のA列について同じ国名のセルを除いて中央のB列のようにあらわすにはどのようにすれば良いですか。また、同じ国名の数、たとえばこの場合は「アメリカ」は6(C列)になりますが、これをあらわすにはどのような関数を使用すれば良いでしょうか。ご教示のほどお願いいたします。

  • エクセルのマクロで重複データの削除

    横17列、縦、約1000行の表があります。 4行目が項目で、5行目以降は次のように並んでいます。 A列(日付)、B列~H列(各データ) I列(契約番号)J列~Q列(各データ) 縦の並び順は、ばらばらで、日付順ではありません。しかも結構重複があります。 そこで、I列の商品番号をキーにして、重複をチェックし、重複しているものは、日付が新しいものを生かし、古い方は削除しようと思います。 しかし、手作業でやるにはあまりに多すぎるため、出来ればマクロでやりたいのですが、このように高度なものは、わたしが出来るマクロの記録程度では手におえそうもありません。 どのようにやったらよいのかどなたかお教え願えませんでしょうか?

  • エクセルで重複データを両方とも削除するには

    こんにちは。エクセルでデータを加工しています。 仮にA列のそれぞれのセルに 1 2 3 4 5 1 2 とあった場合、重複しているデータを両方とも削除するにはどうすればいいのでしょうか。 つまり、最終的に、 3 4 5 と重複していないデータのみを残す方法です。 重複しているデータを1つだけ削除するのはわかるのですが、 このケースはわからないので教えてください。

  • エクセル2007の[重複の削除]をエクセル2003でしたいです。

    列データーが10ほどあり、ある特定の列が2つや3つを条件に重複してる場合は削除をしたいです。 できればチェックボックスのようなものがあって、毎回違った特定列を条件にしたいです。 列データは減らせません。 マクロでやり方が解ればくめるかと思ったのですが特定の列を指定して、重複を探し削除するという方法が思いつきません。 エクセル2007の[重複の削除]という機能できるようですが、エクセル2003などで実現する方法はないでしょうか?

  • マクロにて重複データの削除を行う方法

    エクセルにてD列、H列において重複が両方に存在する場合に (D列にて重複かつH列にても重複する場合) そのデータを行ごと削除したいのですが、 上記のマクロの記述が分からず困っております。 どなたか方法をご伝授いただけたらうれしいです。

専門家に質問してみよう