• ベストアンサー

エクセルで重複するセルを削除したい

エクセル2000で同じ内容のセルが複数あったとき、ひとつだけを残し他を削除する方法を教えてください。 ただし少し条件があります。 データーは5列100行位からなっています。 A列にある重複したデーターのセルを削除したいのですが、A列は同一なのですがB列は異なっています。B列に数字が入っているセルとうでないセルがあるのですが、数字が入っているものを残したいのです。 具体例は次のとおりです。 A列に 「ホンダCIVIC」 B列 「-」と書かれた行と A列に 「ホンダCIVIC」 B列 「2」と書かれた行、 A列に 「ホンダCIVIC」 B列 「5」と書かれた行、 のA列だけを見ると重複した3行が有ったとします。 B列に「5」または「2」の入った行ひとつだけ残し、他を削除したいのです。 何かよい方法があればお教えください。よろしくお願いします。

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

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

済みません、直ぐ気がついたのですが、Sheet2へSheet1のセルから移すところ For k = 1 To 4 sheet2.Cells(j, k) = sheet1.Cells(i, k) Next k の真中行の右辺を sheet2.Cells(j, k) = RTRim(sheet1.Cells(i, k)) として見てください。 For K=1 ・・が3箇所あるので、3箇所修正してください。これが原因ではないでしょうか。 比較して見るときだけRTrimしていました。セルへセットする部分もRTrimしましょう。 それとRTrimで無くTrimで統一してみて、どちらが良いか、結果を見てください。

shishi16
質問者

お礼

何度もご迷惑をおかけし申し訳ありません。 #6さんの回答をきっかけに原因がわかってきました。 問題は私のデーターにあるようです。 webファイルで出力しソースを確認したところ、半角スペースが特殊文字である で記入されていました。これが半角スペースが除去できなかった原因であると思われます。 ご迷惑をおかけし申し訳ありませんでした。 今回教えていただいたことで改めてVBAがいろいろできることを認識しました。 もしよろしければご推奨のサイトとか書籍があればお教えいただけないでしょうか。 よろしくお願いします。

shishi16
質問者

補足

たびたびで申し訳ありません。 ご指摘部分を修正したのですが、変化はありませんでした。 RTrim Trimともに同じです。 まだ何か有りましたらよろしくお願いいたします。 最終的には次のようになっています。 Sub test01() Dim sheet1, sheet2 As Worksheet Set sheet1 = Worksheets("sheet2") Set sheet2 = Worksheets("sheet3") '-----ソート sheet1.Range("A3:D1500").Sort Key1:=sheet1.Range("A1"), Order1:=xlAscending, Header:=xlNo, _ Key2:=sheet1.Range("B1"), Order2:=xlAscending, Header:=xlNo '----- d = sheet1.Range("a1").CurrentRegion.Rows.Count '--------初期設定 m = RTrim(sheet1.Cells(1, 1)) j = 1 For k = 1 To 4 sheet2.Cells(j, k) = RTrim(sheet1.Cells(1, k)) Next k '--------前行とダブり判定 For i = 2 To d If m = RTrim(sheet1.Cells(i, "A")) Then b = sheet1.Cells(i, "B") If IsNumeric(b) = True Then For k = 1 To 4 sheet2.Cells(j, k) = RTrim(sheet1.Cells(i, k)) Next k End If Else j = j + 1 m = RTrim(sheet1.Cells(i, "A")) For k = 1 To 4 sheet2.Cells(j, k) = RTrim(sheet1.Cells(i, k)) Next k End If Next i End Sub

その他の回答 (5)

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.6

#5です。 補足します。 検索条件を入力後、最後に「すべて置換」のボタンを押してください。

shishi16
質問者

お礼

ご回答ありがとうございます。 少しずつ原因がわかってきました。 問題は私のデーターにあるようです。 ご指摘の方法で取れるはずでやってみたのですが、取れません。 おかしいと思い、webファイルで出力しソースを確認したところ、半角スペースが特殊文字である で記入されていました。これが半角スペースが除去できなかった原因であると思われます。 どうもありがとうございました。

  • happypoint
  • ベストアンサー率36% (521/1422)
回答No.5

こんにちは。 半角のスペースを除去するのでしたら、A列を選択状態にした後、「編集」→「置換」で、いかがでしょうか。 「検索する文字列」を、「 」(半角スペース) 「置換後の文字列」を、「」(なにも入力しない) で、半角スペースをすべて取り除けます。

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

>、文字のあとに半角スペースが1個ついていたり2個ついていたりばらばらの状態でした。 RTrim(右側のスペースをのぞく)と言うVBの関数があります。それを使うと、下記変更だけで、追加行コーディング不要です。 m = sheet1.Cells(1, 1) -->m = RTrim(sheet1.Cells(1, 1)) m = sheet1.Cells(1, 1) -->m = RTrim(sheet1.Cells(1, 1)) If m = sheet1.Cells(i, "A") Then --> If m = RTrim(sheet1.Cells(i, "A")) Then m = sheet1.Cells(i, "A") --> m = RTrim(sheet1.Cells(i, "A")) と変更してやって見てください。 場合によればB列データもTrimする必要があるかもしれません。Trimは前後両方のスペースを取り除くので こちらがベターかも知れません。

shishi16
質問者

補足

早速連絡いただきありがとうございます。 教えていただいた変更を加え実行してみたのですが、何も変化はありません。 A列の半角スペースも前と同様2個だっり3個だったりバラバラのままです。 次のような形でマクロを実行しているのですが、どこがおかしいのでしょうか。 たびたびで申し訳ありませんがよろしくお願いいたします。 Sub test01() Dim sheet1, sheet2 As Worksheet Set sheet1 = Worksheets("sheet2") Set sheet2 = Worksheets("sheet3") '-----ソート sheet1.Range("A1:D1500").Sort Key1:=sheet1.Range("A1"), Order1:=xlAscending, Header:=xlNo, _ Key2:=sheet1.Range("B1"), Order2:=xlAscending, Header:=xlNo '----- d = sheet1.Range("a1").CurrentRegion.Rows.Count '--------初期設定 m = RTrim(sheet1.Cells(1, 1)) j = 1 For k = 1 To 4 sheet2.Cells(j, k) = sheet1.Cells(1, k) Next k '--------前行とダブり判定 For i = 2 To d If m = RTrim(sheet1.Cells(i, "A")) Then b = sheet1.Cells(i, "B") If IsNumeric(b) = True Then For k = 1 To 4 sheet2.Cells(j, k) = sheet1.Cells(i, k) Next k End If Else j = j + 1 m = RTrim(sheet1.Cells(i, "A")) For k = 1 To 4 sheet2.Cells(j, k) = sheet1.Cells(i, k) Next k End If Next i End Sub

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

この類のものは関数式では無理でしょう。 へたくそなVBAでやって見ました。ただし定石です。 少数例でしかテストをやってないので、よろしく。 ワークシート画面でALTキーを押しながらF11キーをおす。更にALTキーを押しながらI(挿入)更にM(標準モジュール)の画面に下記を貼りつけて実行する。 Sheet2にデータがあり、Sheet3に望みのものを出す。 Sub test01() Dim sheet1, sheet2 As Worksheet Set sheet1 = Worksheets("sheet2") Set sheet2 = Worksheets("sheet3") '-----ソート sheet1.Range("A3:B15").Sort Key1:=sheet1.Range("A1"), Order1:=xlAscending, Header:=xlNo, _ Key2:=sheet1.Range("B1"), Order2:=xlAscending, Header:=xlNo '----- d = sheet1.Range("a1").CurrentRegion.Rows.Count '--------初期設定 m = sheet1.Cells(1, 1) j = 1 For k = 1 To 9 sheet2.Cells(j, k) = sheet1.Cells(1, k) Next k '--------前行とダブり判定 For i = 2 To d If m = sheet1.Cells(i, "A") Then b = sheet1.Cells(i, "B") If IsNumeric(b) = True Then For k = 1 To 9 sheet2.Cells(j, k) = sheet1.Cells(i, k) Next k End If Else j = j + 1 m = sheet1.Cells(i, "A") For k = 1 To 9 sheet2.Cells(j, k) = sheet1.Cells(i, k) Next k End If Next i End Sub (1)シート名は本番に合わせて、 Set sheet1 = Worksheets("sheet2") Set sheet2 = Worksheets("sheet3") の()内を変えてください。 (2)3箇所あるFor k = 1 To 9の9に付いて、 シートのデータのある列をI列=9までとしていますが、G列なら7、k列まであるなら11と変えてください。 (3)データは第1行目から始まっているものとしています。

shishi16
質問者

お礼

ありがとうございます。できました!!! しかし残念ながら私のデーターに不備があり期待した結果は得られませんでした。 頂いたマクロを実行したところ、A列が一見同じであるにもかかわらず、削除できていないものが多数見つかりました。 元のデーターを見直したところA列が一見同じに見えるのですが、文字のあとに半角スペースが1個ついていたり2個ついていたりばらばらの状態でした。 もしできれば、A列の半角スペースを除去するマクロなどあれば、独立したマクロとしてお教えいただけるとありがたいのですが。

  • arukamun
  • ベストアンサー率35% (842/2394)
回答No.1

こんにちは -と2と5が残った場合、どれを残すかは確実に決まっていないのでしょうか? まず、ソートしましょう。 [データ]→[並べ替え] 列A 列B でソートします。 C2セルに =IF(AND(A1=A2,B1=B2),"重複","") として、C3セルよりも下にもコピーします。 重複している行に重複と表示されます。 検索とかで、重複を検索して、その行を削除して行けば良いと思います。

shishi16
質問者

補足

早速回答いただきありがとうございます。 残すのは数字が入っていればどれでもOKです。 書き忘れがあり申し訳ないのですが、このようなデーターが入ったページが300ほど有ります。 できれば機械的に削除できる方法があればありがたいのですが。 よろしくお願いします。

関連するQ&A

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

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

  • エクセルにて複数のセルの組み合わせの重複を削除するには?

     エクセルの重複セルの削除において、通常、条件が一つの場合は出来るのですが、複数セルの組み合わせの場合、どのようにすればいいでしょうか?  例えば、下記のように項目が並んでいるとします     A     B   C    D  1 メーカー  車種  2 トヨタ  クラウン  3 トヨタ  アルファード  4 トヨタ  カローラ  5 トヨタ  クラウン  6 ホンダ  シビック  8 ホンダ  オデッセイ  9 ホンダ  アコード 10 日産   サニー 11 トヨタ  クラウン 12 日産   スカイライン 13 日産   セドリック 14 ホンダ  シビック  ↓   ↓   このような配列でデーター項目セルが1万ほどあります。  例えば、このうちメーカーがトヨタで車種がクラウン(A2+B2) の組み合わせの重複を見つけ、重複行を削除するにはどのようにすればよいでしょうか? メーカーだけの重複を見つけ、重複行の削除をするには  いつもは=IF(COUNTIF($A$2:A2)>1,NA(),"")のような方法でNA()を返し、ジャンプ→エラー値で一括削除しています。  このような2つの組み合わせの場合、どのような式を立てれば良いでしょうか?教えていただけないでしょうか?

  • Excel(エクセル)で重複されたセルを削除し、またそのセルの行ごと削除するには?

    こんにちは。 添付された画像のように、A列には出身地がかかれてますが、 神奈川、群馬、ロシアについてはいくつもあります。 この時、神奈川、群馬、ロシアの行を重複しないよう1つの行にするため他の重複している行を削除し、 また削除する際、重複している行を比較し、年齢の高い方を消す方法はありますか? つまり画像のAから画像のBのようにしたいのですが、 何かスマートなやり方を教えて頂きたいです。 またこのデータは例ですので短い行ですが、実際は10000行以上にも続いている為、 できましたらそれを考慮した方法がございましたら、ありがたいです。 また当方Excel2003を主に使用し、Excel2007も持っています。 よろしくお願いいたします。

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

    A列、B列、C列・・・とデータが入っていて、B~D列の5行目から10行目が関連の有るデータのかたまりとします。 C~D列の全てのデータが重複している場合に、最初のほうのデータ(行番号が小さいほう)を残すものとして、重複データを削除したいのです。 削除するときは、 B~Dの範囲で削除する。A列等は削除しない。 削除したらデータは上に詰める。 データはソートしない。 ということをやりたいのですが、簡単に出来ますでしょうか? 良く覚えていないのですが、ネット上で色々探してみても、必ずソートしている気がしたので、ソートしない方法が知りたいのですが。

  • Excelで、重複データを一括で削除する方法

    お世話になっております。 Excelで、重複データを一括で削除する方法について 300列ほどあるデータがあります。 (行数は、各列に30行ほどです) 各列には重複するデータがあります。これを削除したく。 なお、各列(隣の列)は、関連性がありません。 よって、複数の列を参照して重複データを削除する必要はなく A列内の重複データ、B列の重複データをそれぞれ削除したいのですが、 フィルタオプションからの重複データを無視する、や、重複データの削除 機能では、1列ずつ実行することで可能ですが、300列以上あるので 現実的ではありません。 そこで、一括で各列の重複データを削除する方法を教えてください。 ※なお、列は300ほどあるため、作業用(countifで重複をピックアップした後、フィルタして 削除など)の方法は、列分つくるのは現実的ではないため、それ以外の方法はないでしょうか。 よろしくお願いします。

  • エクセルで重複セルを削除するマクロを考えています

    シート1のA列に顧客No.が並んでいます。 A列は 2 2 3 4 4 4 5 7 8 ・・・ という風に数千番台までデータがあります。 数字が飛んでいるのは永久欠番的な顧客がいるからです同一番号が複数あるのは B列以降に入力されている顧客情報に追加が あった場合です。 前半 A列とB列の間に列を挿入してB1セルに =A1     と入れます    B2以降は =IF(A2=A1,"",A2) と入れます。    この式をA列のデータがある部分まで    コピーする。    B列をコピーしてB列自体に「値」で貼り付ける。 後半 B列でフィルタをかけて空白セルを選択し    そこに属するダブリ列データを全部消す。    B列そのものを削除し    A列で昇順に並べ替えしたら完成。 というマクロを考えているのですが 後半の部分をどうやって記述したらよいかわかりません もしくはフィルタや並べ替え等で行うのは VBA向きではないのでしょうか? なにか良い方法がありましたら御教授願います。

  • セルの数字を昇順に並び替えて重複削除する方法

    いつも大変お世話になっております。 どなたかご存じの方がお見えでしたら回答頂けると幸いです。 【質問】  添付図のとおり、2列×20行の数字が【入力値2列】欄に入っています。  この数字を昇順に並び替えて重複数字を削除したものを【重複チェック済2列】に  出力します。また、【入力値2列】欄の数字を【入力値1列】に縦1列にして数字 を昇順に並び替えて重複数字を削除したものを【重複チェック済1列】に出力しま す。具体的には下記(1)~(4)の手順です。質問は2列×20行での場合ですが、  2列×200行の場合でも上記のことができるようにしたいです。    *********************************** (1)入力値2列(A列・B列)に2つの値をセットします。 (2)入力値2列(A列・B列)の値を重複チェック済2列(D列・E列)に並べて昇順に並び替えて重複数字を削除します。 (3)入力値2列(A列・B列)の値を入力値1列(G列)に1列にセットします。 (4)入力値1列(G列)の値を重複チェック済1列(I列)に並べて昇順に並び替えて重複数字を削除します。 以上、よろしくお願いします。

  • Excelの重複データーを削除したい

    Excel 2010 の A列 に複数のデーターがあります。これをExcelの機能で昇順に並べ替えます。 重複したデーターが有れば削除し、ブランク行のない状態にするため VBA で処理していますが、この作業を簡単に行える良い方法が有れば教えてください。

  • ExcelでA列内で重複するレコードを削除

    A、B、C列にデータが入力されており、A列の店名が重複する場合、最初の1つを残して、他の重複するレコード(行全体)を削除する方法を教えてください。 A列で重複していても、B、C列で内容が違う可能性があります。 例えば、 A列:田中商店 B列:本町1-1-1 C列:0120-000-000 A列:田中商店 B列:本町1-1-11 C列:0120-000-001 この様にA列で田中商店が重複する場合、1番目の田中商店の行だけを残し、2番目以降は行全体を削除して上方向に詰めたいです。

  • エクセルの重複データ削除について

    B列に重複している数値が3件あります。 1件のみ消して行は詰めない方法はありませんか データツールの重複データ削除をすると行が詰まってしまいます。 1件のみ表示し空白行にしたい。

専門家に質問してみよう