エクセルでセル内の重複する文字列を削除する方法を教えてください。


例えばA1のセルに次のような文字列があります

斎藤(18)
武田(21)
稲葉(41)
田中(3)
斎藤(18)
金子(8)
田中(3)

この中で重複している文字列(斎藤(18)田中(3))を削除し、以下のようにしたいと思います。

斎藤(18)
武田(21)
稲葉(41)
田中(3)
金子(8)

区切り位置にはカンマやスペースは入ってません。
(改行コードは入ってます)
わかる方おられましたら教えていただけますと幸いです。

よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/30 11:31

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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/30 11:36

こんにちは!


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
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/29 10:02

step1)


A1セルを選ぶ
データメニュー(データタブ)から「区切り位置」を開始する
「カンマやタブで区切られた…」で次へ行き
区切り文字として「その他」にチェックを入れ,その右隣のボックスの中でCtrl+j(コントロールキーを押しながらJのキーを押す)を記入し
完了するとA1からG1に展開される。


step2)
A2に
=IF(MATCH(A1,1:1,0)=COLUMN(A1),A1&CHAR(10),"")&B2
と記入し,G2までコピー貼り付ける


step3)
A2をコピーし,形式を選んで貼り付けで値のみ貼り付けて値化する。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/29 10:02

[No.2]の誤謬訂正



> 4.セル C3、B4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。
> 5.セル B3 を下方にズズーッとドラッグ&ペースト。

を次のように訂正します。失礼しましたm(__)m

 4.セル C3、C4 に式 =B3、=C3&CHAR(10)&B4 をそれぞれ入力。
 5.セル C4 を下方にズズーッとドラッグ&ペースト。
    • good
    • 0

「セル内の重複する文字列を削除」でなく、(添付図の範囲 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 は“折り返して全体を表示する”に書式設定しています。
「エクセル セル内の重複する文字列を削除す」の回答画像2
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/29 10:00

Excel 2003では


▼操作方法:重複データを削除する
(A1セルにフィールド見出し、A2:A10セルに9個のデータが入力されているときに、重複データを削除した新たなリストをC列に作成する例)

メニュー[データ]-[フィルタ]-[フィルタオプションの設定]をクリック
 ↓
[フィルタオプションの設定]ダイアログで
 [抽出先]欄で[指定した範囲]オプションボタンをOnに
 [リスト範囲]欄で「A1:A10」セルを
 [抽出範囲]欄で「C1」セルを
 [重複するレコードは無視する]チェックボックスをOnに
設定
 ↓
[フィルタオプションの設定]ダイアログ-[OK]ボタンをクリック

厳密な言い方をすれば重複データを削除するのではなく、元のデータを残したまま重複データを除いた新たなリストを作成する方法です。


Excel 2007では重複データを削除するための、専用のコマンドが新たに作られています。

▼操作手順:重複データを削除する
データベース内の任意の一つのセルを選択
 ↓
[データ]タブ
 -[データツール]グループ
  -[重複の削除]ボタンをクリック
 ↓
[重複の削除]ダイアログで、
 削除したいデータの含まれるフィールドのチェックボックスのみOnに
 ↓
[重複の削除]ダイアログ-[OK]ボタンをクリック

上記の操作を行い、
データの削除が行われると、
「重複する××個の値が見つかり、削除されました。一意の値が○○個残っています。」
というメッセージが表示され、
重複データがなく削除されなかった場合、
「重複する値は見つかりませんでした。」
というメッセージが表示されます。
    • good
    • 0
この回答へのお礼

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

お礼日時:2012/06/29 09:58

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q[Excel]重複チェックで文字列を表示したい

トレーディングカードのコレクターです。
コレクションの数が多く、ダブりやカードの状態を把握出来なくなってきたため、先日からExcel 2004でリストを作成しています。

現在のExcelの使い方は、所有済みカードを列記したワークシート「所有リスト」が既にあり、別のワークシートに、カードショップやサークルが公開しているリストのテキストを流し込み、「=COUNTIF」で重複をチェックして、未所有分の購入を検討するという使い方をしています。

そこで質問です。
現在は、(質問サイトなど見よう見まねですが)「=COUNTIF」で下記の様にワークシート「所有リスト」のD列(カード名)を探し、「0」が未所有、「1」が所有済み(所有数)という表を作り、重複のチェックをしているのですが、ワークシート「所有リスト」のL列に記入している「コンディション」の列を表示することは出来ないでしょうか?


<現在の表>
A列  |B列
---------------------------
カード名|重複[=COUNTIF(所有リスト!D:D,B1)]
---------------------------
ああああ|0 ←未所有なので0
いいいい|1 ←ワークシート「所有リスト」にあるカードなので1
うううう|1 ←ワークシート「所有リスト」にあるカードなので1


<理想の表>
A列  |B列
------------------------
カード名|コンディション
------------------------
ああああ|  ←未所有なので空欄
いいいい|BAD←ワークシート「所有リスト」L列に記入している文字列
うううう|MINT←ワークシート「所有リスト」L列に記入している文字列


なお、ワークシート「所有リスト」は下記の様な記入内容です。

A列|B列|C列|D列 カード名|E列|F列|G列|H列|I列|J列|K列|L列 コンディション|

Excel自体の知識が乏しいため、質問の仕方すら上記のような感じで良いのかも分からないので、情報が不足している様でしたらご指摘下さればと思います。

トレーディングカードのコレクターです。
コレクションの数が多く、ダブりやカードの状態を把握出来なくなってきたため、先日からExcel 2004でリストを作成しています。

現在のExcelの使い方は、所有済みカードを列記したワークシート「所有リスト」が既にあり、別のワークシートに、カードショップやサークルが公開しているリストのテキストを流し込み、「=COUNTIF」で重複をチェックして、未所有分の購入を検討するという使い方をしています。

そこで質問です。
現在は、(質問サイトなど見よう見まねですが)...続きを読む

Aベストアンサー

A2セルの値を検索値として所有リストシートのD列のデータの位置を検索し、その行のL列のデータを表示するなら以下の式になります。

=IF(COUNTIF(所有リスト!D:D,A2),INDEX(所有リスト!L:L,MATCH(A2,所有リスト!D:D,0),""))

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

よろしくお願いいたします。
セル内にスペースで区切られた文字列(単語)があり、文字列の数は不確定です。
その文字列の中で重複する文字列があり、それらを1つにまとめたいという要望です。
セルの行数は約6000ほどあります。



A1セル:リンゴ リンゴ みかん
B1セル:リンゴ みかん
A2セル:みかん バナナ みかん バナナ みかん
B2セル:みかん バナナ
・・・

よろしくお願いいたします。

Windows7 HomePremium
Office2010

Aベストアンサー

こんばんは!
VBAになってしまいますが、一例です。

データは1行目からあるとします。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i As Long
Dim k As Long
Dim tmp As Variant
Dim myArray As Variant
Application.ScreenUpdating = False
Columns(2).ClearContents
For i = 1 To Cells(Rows.Count, 1).End(xlUp).Row
tmp = WorksheetFunction.Substitute(Cells(i, 1), " ", " ")
If InStr(tmp, " ") > 0 Then
myArray = Split(tmp, " ")
For k = 0 To UBound(myArray)
If InStr(Cells(i, 2), myArray(k)) = 0 Then
Cells(i, 2) = Cells(i, 2) & myArray(k) & " "
End If
Next k
Else
Cells(i, 2) = Cells(i, 1)
End If
Next i
Application.ScreenUpdating = True
End Sub 'この行まで

こんな感じではどうでしょうか?m(_ _)m

こんばんは!
VBAになってしまいますが、一例です。

データは1行目からあるとします。

画面左下の操作したいSheet見出し上で右クリック → コードの表示 → VBE画面に
↓のコードをコピー&ペーストしてマクロを実行してみてください。
(Alt+F8キー → マクロ → マクロ実行です)

Sub test() 'この行から
Dim i As Long
Dim k As Long
Dim tmp As Variant
Dim myArray As Variant
Application.ScreenUpdating = False
Columns(2).ClearContents
For i = 1 To Cells(Rows.Cou...続きを読む

Qエクセル 重複する文字列がある場合の削除について

よろしければお知恵を拝借できれば幸いです。

A列       B列         C列
東京都    中央区    中央区○×小学校
東京都    中央区    中央区○△小学校
東京都    中央区    中央区○○小学校

上記のようなデータがあるのですが、重複しているデータが存在しているので
D、E列を作業列として、

       D列                 E列
=CONCATENATE(A1,B1,C1)      =IF(COUNTIF($D$1:D1,D)>1,NA(),"")
以下コピペ

で重複を消していっているのですが、

C列のデータの中に

中央区○○小学校
中央区立○○小学校
○○小学校
(※以上はすべて同じもの)

のような形でデータが存在しており、上記の重複データの抽出だと
拾えないので困っております。

これら三つのパターンを全て同じデータだと規定して、重複を抽出する
方法などは可能でしょうか?

よろしければご教示頂けると幸いです。
どうぞよろしくお願い致します。

Aベストアンサー

 C列のセルに入力されている文字列から自治体名と学校名を分離する際に、区を基準に分けただけでは、
立川市立第一小学校、武蔵野市立第一小学校、武蔵村山市立第一小学校、日野市立第一小学校の様な例や、
練馬区立南町小学校府中市立南町小学校東久留米市立南町小学校の様な例
には対応出来ません。
 ですから、以下の様にされては如何でしょうか?

 今仮に、1行目は「都道府県」、「自治体名」、「学校名」といった項目名が入力されていて、実際のデータは2行目以下に入力されているものとします。
 又、重複を除外した学校名を、F2以下に表示するものとします。
 まず、D2セルに次の関数を入力して下さい。

=$A2&$B2&"立"&SUBSTITUTE(SUBSTITUTE($C2,"立",),$B2,)

 次に、E2セルに次の関数を入力して下さい。

=IF(COUNTIF($D$2:$D2,$D2)=1,ROW(),"")

 次に、F2セルに次の関数を入力して下さい。

=IF(ROWS($2:2)>COUNT($E:$E),"",INDEX($D:$D,SMALL($E:$E,ROWS($2:2))))

 次に、D2~F2の範囲をコピーして、同じ列の2行目以下に貼り付けて下さい。

 以上です。

 C列のセルに入力されている文字列から自治体名と学校名を分離する際に、区を基準に分けただけでは、
立川市立第一小学校、武蔵野市立第一小学校、武蔵村山市立第一小学校、日野市立第一小学校の様な例や、
練馬区立南町小学校府中市立南町小学校東久留米市立南町小学校の様な例
には対応出来ません。
 ですから、以下の様にされては如何でしょうか?

 今仮に、1行目は「都道府県」、「自治体名」、「学校名」といった項目名が入力されていて、実際のデータは2行目以下に入力されているものとします。
 又、...続きを読む

Qエクセル 重複した文字列がある場合の抽出

お知恵を拝借願えれば幸いです。

先日こちらで、似たような質問をさせて頂き、それは解決したのですが
新たな問題があり質問をさせて頂きます。

A列       B列         C列
東京都    中央区    中央区○×小学校
東京都    中央区    中央区立○○小学校
東京都    中央区    中央区○○小学校

先日は上記のデータのうち、「中央区立○○小学校」、「中央区○○小学校」(及び
「○○小学校」)を同じデータとして抽出していくということについて
伺いましたが、さらに以下のようなデータも同じデータとして抽出する方法について
悩んでおります。

列       B列         C列
東京都    中央区    中央区○○小学校
東京都    中央区    中央区立○○小学校
東京都    中央区    ○○小学校(▲▲)
東京都    中央区    ○○小学校 ▲▲

▲▲は別名が併記されているといったイメージです。

もしよろしければご助言頂ければ幸いです。
よろしくお願い致します。

Aベストアンサー

A1セルからC1セルには項目名が有るとしてD2列には次の式を入力して下方にドラッグコピーします。

=IF(A2="","",LEFT(CONCATENATE(A2,B2&"立",SUBSTITUTE(SUBSTITUTE(C2,B2&"立",""),B2,"")),FIND("学校",CONCATENATE(A2,B2&"立",SUBSTITUTE(SUBSTITUTE(C2,B2&"立",""),B2,"")))+1))

D列を重点に抽出をすればよいでしょう。

QA列で0以上で18以下ならB列のセルに色づけ

いつもお世話になります
WINDOWS7 EXCELL2010です

A列の値が、
  0:01 より大きく
 18:00 より小さいときに

条件付き書式でB列のセルに色を付けたい。

勤務管理で早退時管理用です

ご指導いただけませんか

Aベストアンサー

時間の入力は文字列ではなくてシリアル値だとして、

B1セルの条件付き書式(メニューバーの「書式」→「条件付き書式」)で、
「セルの値が」を「計算式が」にして、計算式を、
=AND(A1>0.000695,A1<0.75)
と入力、セルの書式設定をすればよいと思います。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング

おすすめ情報