1436755990 Excelの質問です。重複するデータを行毎削除するような関数やマクロを教えていただけますでしょうか。


今、図のようなデータが、B~E列にかけて12000行ぐらい並んでおります。
この状況におきまして、「1 りんご」「2 ごりら」「3 らっぱ」のデータが重複しております。
B列にて、重複する番号が2つ以上ありましたら、1つの行だけを残して、それ以外の行は全て削除したいです。
B列の番号は1~99999番までのパターンがあります。

皆様のお力添えをいただければ幸いです。
よろしくお願い致します。

回答の条件
  • 1人1回まで
  • 13歳以上
  • 登録:2015/07/13 11:53:10
  • 終了:2015/07/17 04:02:22

ベストアンサー

id:a-kuma3 No.2

a-kuma3回答回数4490ベストアンサー獲得回数18592015/07/13 22:40:41

ポイント150pt

一発で重複行削除をするメソッドがあります。
https://msdn.microsoft.com/ja-jp/library/office/ff193823.aspx

こんな感じで使います。

Sub 重複削除()
    ActiveSheet.Range("B:E").RemoveDuplicates Columns:=1, Header:=xlYes
    '                 ↑                      ↑          ↑
    '                 ↑                      ↑          範囲の最初の行を見出しとして扱う
    '                 ↑                      ↑
    '                 ↑                      範囲の左から1列目を重複行の判定に使う
    '                 ↑
    '                 B~E列で全ての行を対象
End Sub

B~E列以外の範囲では、消された行のデータはそのまま残ります。

id:moon-fondu

すごいです!一瞬でした・・・。

2015/07/15 16:04:05

その他の回答(2件)

id:taknt No.1

きゃづみぃ回答回数13539ベストアンサー獲得回数11982015/07/13 12:29:02

ポイント150pt
Sub main()
Dim a As Long
Dim b As Long
Dim c As Long

対象シート = "Sheet1"

b = Worksheets(対象シート).Cells(Rows().Count, "B").End(xlUp).Row
If b = 1 And Worksheets(対象シート).Cells(2, "B") = "" Then
Else
    b = b + 1
End If
    

For a = b To 2 Step -1
    For c = a - 1 To 2 Step -1
        If Worksheets(対象シート).Cells(a, "B") = Worksheets(対象シート).Cells(c, "B") Then
            Worksheets(対象シート).Rows(c).Delete Shift:=xlUp
            Exit For
        End If
    Next c
Next a

End Sub
id:taknt

一行目は 空白になっていましたので、二行目以降を対象としています。

2015/07/13 12:29:30
id:moon-fondu

ありがとうございます、うまく稼働して消せました!

2015/07/15 16:03:59
id:a-kuma3 No.2

a-kuma3回答回数4490ベストアンサー獲得回数18592015/07/13 22:40:41ここでベストアンサー

ポイント150pt

一発で重複行削除をするメソッドがあります。
https://msdn.microsoft.com/ja-jp/library/office/ff193823.aspx

こんな感じで使います。

Sub 重複削除()
    ActiveSheet.Range("B:E").RemoveDuplicates Columns:=1, Header:=xlYes
    '                 ↑                      ↑          ↑
    '                 ↑                      ↑          範囲の最初の行を見出しとして扱う
    '                 ↑                      ↑
    '                 ↑                      範囲の左から1列目を重複行の判定に使う
    '                 ↑
    '                 B~E列で全ての行を対象
End Sub

B~E列以外の範囲では、消された行のデータはそのまま残ります。

id:moon-fondu

すごいです!一瞬でした・・・。

2015/07/15 16:04:05
id:jivejp No.3

株式会社JIVE回答回数14ベストアンサー獲得回数42015/07/14 00:44:19

ポイント150pt

関数ではないのですが、Excelの機能として「重複の削除」があります。
これは、行ごと削除できますし、行数制限などはありません。
手順は
 1)B列にカーソルを置く
 2)メニュー[データ]-[重複の削除]を選ぶ
 3)列選択が出るのでB列のみチェックを入れる
  (B列以外はチェックを外す)
 4)OKを押す

これだけで、重複された行は削除されます。
ただし、Ver2003の場合は、また別の手段が必要です。

この説明が下記です。
http://www.microsoft.com/ja-jp/atlife/tips/archive/office/tips/002.aspx

■この手順をマクロ登録することで、ボタン1つで実行できます。

1.マクロの登録方法はこちら
 ※[マクロ記録終了]を押すまで、上記の1)~4)作業を行い、[マクロ記録終了]を押すことで、その作業を登録できます。

2.マクロ登録したら、ボタンを作る
 [開発]タブ-[挿入]でボタンを選び、シート上に置く

3.ボタンに1で登録したマクロを選び、「ok」を押すと登録完了

4.作成したボタンを押す

以上でマクロの登録から実行まで行えます。

お役に立てれば幸いです。

id:moon-fondu

すごいです、Excelにこんな便利な機能があるなんて・・・知りませんでした!
ありがとうございます。

2015/07/15 16:06:28
id:moon-fondu

みなさまありがとうございます!どれもすばらしいご回答でした!
なので、ポイントは同じ配分にさせていただきましたが、一番処理スピードが早かったa-kuma3さんのメソッドをベストアンサーにさせていただきました。
また何かありましたらよろしくお願いします。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません