- ベストアンサー
エクセル セル内の重複する文字列を削除する方法
エクセルでセル内の重複する文字列を削除する方法を教えてください。 例えばA1のセルに次のような文字列があります 斎藤(18) 武田(21) 稲葉(41) 田中(3) 斎藤(18) 金子(8) 田中(3) この中で重複している文字列(斎藤(18)田中(3))を削除し、以下のようにしたいと思います。 斎藤(18) 武田(21) 稲葉(41) 田中(3) 金子(8) 区切り位置にはカンマやスペースは入ってません。 (改行コードは入ってます) わかる方おられましたら教えていただけますと幸いです。 よろしくお願いいたします。
- みんなの回答 (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
その他の回答 (6)
- tom04
- ベストアンサー率49% (2537/5117)
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
お礼
新しい方法をお教えくださりありがとうございます! ただ、こちらのエクセル知識が乏しいので、A1セルじゃない時にどこをいじればいいのかがわからなくなってしまいました。。。 せっかく教えていただいたのに使いこなせなくて申し訳ありません。
- tom04
- ベストアンサー率49% (2537/5117)
こんにちは! 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
お礼
ご回答ありがとうございます。 実は同じようなセルが300行以上あるんです。。。 こういう場合はマクロの方がいいかもしれませんね。
- keithin
- ベストアンサー率66% (5278/7941)
step1) A1セルを選ぶ データメニュー(データタブ)から「区切り位置」を開始する 「カンマやタブで区切られた…」で次へ行き 区切り文字として「その他」にチェックを入れ,その右隣のボックスの中でCtrl+j(コントロールキーを押しながらJのキーを押す)を記入し 完了するとA1からG1に展開される。 step2) A2に =IF(MATCH(A1,1:1,0)=COLUMN(A1),A1&CHAR(10),"")&B2 と記入し,G2までコピー貼り付ける step3) A2をコピーし,形式を選んで貼り付けで値のみ貼り付けて値化する。
お礼
ご回答ありがとうございます。 同じようなセルが300行以上あるのですが、その場合もこの方法は有効でしょうか。
[No.2]の誤謬訂正 > 4.セル C3、B4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。 > 5.セル B3 を下方にズズーッとドラッグ&ペースト。 を次のように訂正します。失礼しましたm(__)m 4.セル C3、C4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。 5.セル C4 を下方にズズーッとドラッグ&ペースト。
「セル内の重複する文字列を削除」でなく、(添付図の範囲 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 は“折り返して全体を表示する”に書式設定しています。
お礼
画像までつけてくださりありがとうございました! 期待した成果は得られましたが、実は同じようなセルが300行以上あるんです。。。
- aokii
- ベストアンサー率23% (5210/22062)
Excel 2003では ▼操作方法:重複データを削除する (A1セルにフィールド見出し、A2:A10セルに9個のデータが入力されているときに、重複データを削除した新たなリストをC列に作成する例) メニュー[データ]-[フィルタ]-[フィルタオプションの設定]をクリック ↓ [フィルタオプションの設定]ダイアログで [抽出先]欄で[指定した範囲]オプションボタンをOnに [リスト範囲]欄で「A1:A10」セルを [抽出範囲]欄で「C1」セルを [重複するレコードは無視する]チェックボックスをOnに 設定 ↓ [フィルタオプションの設定]ダイアログ-[OK]ボタンをクリック 厳密な言い方をすれば重複データを削除するのではなく、元のデータを残したまま重複データを除いた新たなリストを作成する方法です。 Excel 2007では重複データを削除するための、専用のコマンドが新たに作られています。 ▼操作手順:重複データを削除する データベース内の任意の一つのセルを選択 ↓ [データ]タブ -[データツール]グループ -[重複の削除]ボタンをクリック ↓ [重複の削除]ダイアログで、 削除したいデータの含まれるフィールドのチェックボックスのみOnに ↓ [重複の削除]ダイアログ-[OK]ボタンをクリック 上記の操作を行い、 データの削除が行われると、 「重複する××個の値が見つかり、削除されました。一意の値が○○個残っています。」 というメッセージが表示され、 重複データがなく削除されなかった場合、 「重複する値は見つかりませんでした。」 というメッセージが表示されます。
お礼
ご回答ありがとうございました。 列方向だったせいか期待した成果にはなりませんでした。。。
お礼
できました! ありがとうございます!