• ベストアンサー

エクセル セル内の重複する文字列を削除する方法

エクセルでセル内の重複する文字列を削除する方法を教えてください。 例えばA1のセルに次のような文字列があります 斎藤(18) 武田(21) 稲葉(41) 田中(3) 斎藤(18) 金子(8) 田中(3) この中で重複している文字列(斎藤(18)田中(3))を削除し、以下のようにしたいと思います。 斎藤(18) 武田(21) 稲葉(41) 田中(3) 金子(8) 区切り位置にはカンマやスペースは入ってません。 (改行コードは入ってます) わかる方おられましたら教えていただけますと幸いです。 よろしくお願いいたします。

  • 8173
  • お礼率85% (6/7)

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

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

A1セル以下、A列にデータがあるとして、変換結果をB列に書き出します。 連想配列のキーの配列をまとめるのに、Joinが使ってみたかっただけです。 重複チェックするデータ数が今回程度では、速度上のメリットもないかもしれませんが、ご参考まで。 Sub test() Dim myCell As Range, targetRange As Range Dim buf As Variant Dim i As Long Dim myDic As Object Application.ScreenUpdating = False Application.Calculation = xlCalculationManual With ActiveSheet Set targetRange = .Range(.Range("A1"), .Range("A" & .Rows.Count).End(xlUp)) End With Set myDic = CreateObject("Scripting.Dictionary") For Each myCell In targetRange.Cells buf = Split(myCell.Value, vbLf) For i = LBound(buf) To UBound(buf) If Not myDic.Exists(buf(i)) Then myDic.Add buf(i), "" Next i myCell.Offset(0, 1).Value = Join(myDic.keys, vbLf) myDic.RemoveAll Next myCell Set myDic = Nothing Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub

8173
質問者

お礼

できました! ありがとうございます!

その他の回答 (6)

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

No.5です。 >実は同じようなセルが300行以上あるんです。。。 ということなので、もう一度コードを載せてみます。 A列データは1行目からあるとします。 前回同様B列を作業用の列として使用していますので、B列は何もない!ということだとして・・・ Sub test2() 'この行から Dim i, k As Long Dim str As String Dim myArray As Variant Application.ScreenUpdating = False For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row myArray = Split(Cells(i, 1), vbLf) For k = 0 To UBound(myArray) Cells(k + 1, 2) = myArray(k) Next k For k = Cells(Rows.Count, 2).End(xlUp).Row To 2 Step -1 If WorksheetFunction.CountIf(Columns(2), Cells(k, 2)) > 1 Then Cells(k, 2).Delete (xlUp) End If Next k For k = 1 To Cells(Rows.Count, 2).End(xlUp).Row str = str & Cells(k, 2) & vbCrLf Next k Cells(i, 1) = Left(str, Len(str) - 1) str = "" Columns(2).Clear Next i Application.ScreenUpdating = True End Sub 'この行まで ※ 操作方法は前回同様です。 こんな感じではどうでしょうか?m(_ _)m

8173
質問者

お礼

新しい方法をお教えくださりありがとうございます! ただ、こちらのエクセル知識が乏しいので、A1セルじゃない時にどこをいじればいいのかがわからなくなってしまいました。。。 せっかく教えていただいたのに使いこなせなくて申し訳ありません。

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

こんにちは! VBAでの一例です。 B列を作業用の列で使用していますので、B列にデータはない!という前提です。 画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に ↓のコードをコピー&ペーストしてマクロを実行してみてください。 (Alt+F8キー → マクロ → マクロ実行です) Sub test() 'この行から Dim k As Long Dim str As String Dim myArray As Variant myArray = Split(Cells(1, 1), vbLf) Application.ScreenUpdating = False For k = 0 To UBound(myArray) Cells(k + 1, 2) = myArray(k) Next k For k = Cells(Rows.Count, 2).End(xlUp).Row To 1 Step -1 If WorksheetFunction.CountIf(Range(Cells(1, 2), Cells(k, 2)), Cells(k, 2)) > 1 Then Cells(k, 2).Delete (xlUp) End If Next k For k = 1 To Cells(Rows.Count, 2).End(xlUp).Row str = str & Cells(k, 2) & vbCrLf Next k Cells(1, 1) = Left(str, Len(str) - 1) Columns(2).ClearContents Application.ScreenUpdating = True End Sub 'この行まで ※ 一旦マクロを実行すると元に戻せませんので、 別Sheetでマクロを試してみてください。m(_ _)m

8173
質問者

お礼

ご回答ありがとうございます。 実は同じようなセルが300行以上あるんです。。。 こういう場合はマクロの方がいいかもしれませんね。

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

step1) A1セルを選ぶ データメニュー(データタブ)から「区切り位置」を開始する 「カンマやタブで区切られた…」で次へ行き 区切り文字として「その他」にチェックを入れ,その右隣のボックスの中でCtrl+j(コントロールキーを押しながらJのキーを押す)を記入し 完了するとA1からG1に展開される。 step2) A2に =IF(MATCH(A1,1:1,0)=COLUMN(A1),A1&CHAR(10),"")&B2 と記入し,G2までコピー貼り付ける step3) A2をコピーし,形式を選んで貼り付けで値のみ貼り付けて値化する。

8173
質問者

お礼

ご回答ありがとうございます。 同じようなセルが300行以上あるのですが、その場合もこの方法は有効でしょうか。

noname#204879
noname#204879
回答No.3

[No.2]の誤謬訂正 > 4.セル C3、B4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。 > 5.セル B3 を下方にズズーッとドラッグ&ペースト。 を次のように訂正します。失礼しましたm(__)m  4.セル C3、C4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。  5.セル C4 を下方にズズーッとドラッグ&ペースト。

noname#204879
noname#204879
回答No.2

「セル内の重複する文字列を削除」でなく、(添付図の範囲 A3:A9 から範囲 B3:B7 を得るような)「列内の重複する文字列を削除」ならお出来になるとしてハナシを進めます。(Excel 2002 で試しました) 1.[データ]→[区切り位置]の機能で、セル A1 の内容を分解して範囲 A2:G2 を得る。 2.[形式を選択して貼り付け]の“行列を入れ替える”機能で、範囲 A3:A9 を得る。 3.列内の重複する文字列を削除」して、範囲 B3:B7 を得る。 4.セル C3、B4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。 5.セル B3 を下方にズズーッとドラッグ&ペースト。 6.セル C7 を[コピー]して、それをセル B1 に[値の貼り付け]。 ちなみに、範囲 A1:B1 は“折り返して全体を表示する”に書式設定しています。

8173
質問者

お礼

画像までつけてくださりありがとうございました! 期待した成果は得られましたが、実は同じようなセルが300行以上あるんです。。。

  • aokii
  • ベストアンサー率23% (5210/22062)
回答No.1

Excel 2003では ▼操作方法:重複データを削除する (A1セルにフィールド見出し、A2:A10セルに9個のデータが入力されているときに、重複データを削除した新たなリストをC列に作成する例) メニュー[データ]-[フィルタ]-[フィルタオプションの設定]をクリック  ↓ [フィルタオプションの設定]ダイアログで  [抽出先]欄で[指定した範囲]オプションボタンをOnに  [リスト範囲]欄で「A1:A10」セルを  [抽出範囲]欄で「C1」セルを  [重複するレコードは無視する]チェックボックスをOnに 設定  ↓ [フィルタオプションの設定]ダイアログ-[OK]ボタンをクリック 厳密な言い方をすれば重複データを削除するのではなく、元のデータを残したまま重複データを除いた新たなリストを作成する方法です。 Excel 2007では重複データを削除するための、専用のコマンドが新たに作られています。 ▼操作手順:重複データを削除する データベース内の任意の一つのセルを選択  ↓ [データ]タブ  -[データツール]グループ   -[重複の削除]ボタンをクリック  ↓ [重複の削除]ダイアログで、  削除したいデータの含まれるフィールドのチェックボックスのみOnに  ↓ [重複の削除]ダイアログ-[OK]ボタンをクリック 上記の操作を行い、 データの削除が行われると、 「重複する××個の値が見つかり、削除されました。一意の値が○○個残っています。」 というメッセージが表示され、 重複データがなく削除されなかった場合、 「重複する値は見つかりませんでした。」 というメッセージが表示されます。

8173
質問者

お礼

ご回答ありがとうございました。 列方向だったせいか期待した成果にはなりませんでした。。。

関連するQ&A

  • Excelでカンマ区切りの文字列をセルに分割する?

     住所録をExcelにコピーしたら、 カンマ区切りに一つのセルに入ってしまいました。 ◇カンマごとに一つのセルに分割して文字列を分ける。 ◇氏と名の間は半角スペースでカンマでは有りませんが、   二つのセルに分ける。 上記について分ける関数を教えてください。    

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

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

  • 重複 があれば削除して1つに

    http://oshiete1.goo.ne.jp/qa4510771.html の族編です。 エクセルの1列の縦長いデータを抽出して 1行の横長いカンマ区切りのテキストにしたいのですが、 エクセルの縦1列をコピペでワードにテキストで貼り付け そこから改行を置き換え削除で横並び1列になったのですが 重複する文字が複数あったので、重複分を削除して1つだけに残したいのです。 エクセルデータは変更してはいけないので、コピーしかできません。別のエクセルにならコピーしてもかまいません。 手作業では大変な作業ですので、簡単で単純な方法を教えて下さい。 ********************************** aaa  ← エクセルの縦列のデータ bbb  ← ccc aaa ddd bbb ↓ aaa,bbb,ccc,ddd こんな風に重複分だけ削除して1行カンマテキストにしたいのです。 <(_ _)>

  • Excelの長い文字列をスペースで区切ってセルに?

    長い文字列が、スペースで区切られています。 このスペースを区切りにしてセルに分割する方法を教えてください。

  • エクセルのセル内の重複文字列処理について

    よろしくお願いいたします。 セル内にスペースで区切られた文字列(単語)があり、文字列の数は不確定です。 その文字列の中で重複する文字列があり、それらを1つにまとめたいという要望です。 セルの行数は約6000ほどあります。 例 A1セル:リンゴ リンゴ みかん B1セル:リンゴ みかん A2セル:みかん バナナ みかん バナナ みかん B2セル:みかん バナナ ・・・ よろしくお願いいたします。 Windows7 HomePremium Office2010

  • エクセル 重複セルについて

    住所リストを制作しておりまして、 全リストから、一定の人を削除したリストを作りたいのですが、 方法が分かりません。 重複しているセルをソートできればと思うのですが、 どなたかお教えいただけますでしょうか?   A列  B列 C列  D列  1 住所 田中     太田 2 住所 斉藤     田中 3 住所 太田     木村 4 住所 木村     渡邉 5 住所 小林  B列にある氏名の中にD列の氏名が重複していたら、 下記のようなことができますでしょうか? ●C列に”重複”と出る   A列  B列 C列    1 住所 田中 重複 または ●B列と重複するD列のセルが隣に並び変えられる   A列  B列 C列  D列  1 住所 田中     田中 なお、A列とB列は一緒にしたいので、 B列だけが並び変えられることは避けたいです。 緊急SOSです! よろしくお願いいたします。

  • セル内の重複英単語を削除したいです。

    セル内の重複英単語を削除したいです。 A列にある3000行くらいをB列に重複削除でお願いいたします。 削除作業時は以下のような条件でお願いいたします。 単語と単語の間は、半角スペースか全角スペース(重複削除時に半角スペースに統一で構いません)。 大文字と小文字の区別なしで削除(apple Apple APPLEはすべて重複とする)。 1つのセルで重複はほとんど1つ(同じ英単語が2つ)なので、1つの重複削除作業でも可。 重複削除する場合、最初の英単語を残し後の英単語を削除。 例 apple orange Apple ↓ apple orange 以上です。 Windows7 エクセル2010。

  • エクセルのセル文字列末尾だけを削除する方法ありますか?

    こんにちは。 エクセルで各セルに ------------------------ 山田さん 鈴木 田中さん 木村さんと川村さん ------------------------ のような最後に”さん”がついている場合とついていない場合があります。 ”さん”を置換して空白にすれば削除できるのですが、 木村さんと川村さん のセルの”木村さん”の”さん”は削除せず、セルの文字列末尾の”川村さん”の”さん”は削除したいのです。 希望としては、 ------------------------ 山田 鈴木 田中 木村さんと川村 ------------------------ の様な形にしたいのですが、何か良い方法ありましたらアドバイス頂けませんでしょうか? よろしくお願いいたします。

  • Excelで下記のようなセルから文字列を取り出す

    [文字列1(字数ランダム)][数字(桁数固定)][文字列2(字数ランダム)][文字列3(字数固定)] 1つのセルに上記のような文字列がはいっています。 それぞれの文字列や数字の境目にはスペースやカンマなどはありません。 このセルから文字列2だけを取り出す方法はあるでしょうか? ご教示お願いいたします。

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

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

専門家に質問してみよう