• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:エクセルまたはVBAで重複行を削除)

エクセルまたはVBAで重複行を削除

このQ&Aのポイント
  • エクセルまたはVBAを使用して、重複行を削除する方法について説明します。
  • 重複行を削除するためには、まずエクセルでデータを準備する必要があります。
  • VBAを使用してイベントを作成し、重複した行を検索して削除することができます。

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

  • ベストアンサー
回答No.1

参考URLで第8章の142項目を参考にしてください。

参考URL:
http://www.voicechatjapan.com/excelvba/VBArei8.htm

その他の回答 (4)

  • ka_na_de
  • ベストアンサー率56% (162/286)
回答No.5

マクロにこだわらないのなら、エクセルのメニューから簡単にできます。 1)1行目を挿入しA1を「ID」、B1を「値」などの見出しをつける。 2)「データ」→「フィルタ」→「フィルターオプションの設定」 3)例えば、    「抽出先」で「指定した範囲」にチェック    「リスト範囲」を「$A:$B」    「抽出範囲」を「$C:$D」     「重複するレコードは無視する」にチェック    以上を設定し「OK」 4)CD列に抽出結果が出ますので、元データが要らないならAB列削除 重複するデータがAB列でCD・・列に異なるデータがぶら下がっていても 同様にできるはずです。

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.4

こんにちは。 >それ以前にエクセルで前準備などして まず、こんなアドバイスが出来ますね。 方針を立てるときに、高度なワザを出しても、記録マクロなどを使っても、結果が同じなら、記録マクロのほうが、意外と良い(速い)ことが多いです。 「重複行を削除」 といったら、Excelユーザーでは、AdvancedFilter(フィルターオプション)を考えます。 しかし、二列に渡っているから、そのままでは出来ません。 だったら、 = A1 & B1 でつなげてしまい、それを、AdvancedFilter で掛けてしまえば簡単だと思いませんか? ところが、一文字と一文字をつなげるならよいのですが、そうではないこともあるので、区切り文字を入れます。 = A1 &","& B1 とすれば良いですね。 ためしに、誰でも可能な記録マクロを取って、簡単に書き換えるだけで出来ます。 これでも、私は、いろんなマクロを試して見た結果です。 Sub EasyMacro()   Dim LastCell As Range   Set LastCell = Range("A65536").End(xlUp) 'A列で最後のセルを取ってしまいました。      '注:横にデータがあると誤動作しますので、削除しておきます。   Range("C1", LastCell.Offset(, 5)).ClearContents      Range("C1", LastCell.Offset(, 2)).FormulaR1C1 = "=RC[-2]&"",""&RC[-1]"   '式から値にする   Range("C1", LastCell.Offset(, 2)).Value = Range("C1", LastCell.Offset(, 3)).Value      'アドバンスフィルタを使う   Range("C1", LastCell.Offset(, 2)).AdvancedFilter _     Action:=xlFilterCopy, _     CopyToRange:=Range("D1"), _     Unique:=True       '出来てしまったら、C列はいらない   Range("C1", LastCell.Offset(, 2)).ClearContents   '区切り位置を使う   Set LastCell = Range("D65536").End(xlUp)   Range("D1", LastCell).TextToColumns _      Destination:=Range("D1"), _      DataType:=xlDelimited, _      TextQualifier:=xlDoubleQuote, _      ConsecutiveDelimiter:=False, _      Tab:=False, _      Semicolon:=False, _      Comma:=True, _      Space:=False, _      Other:=False, _      FieldInfo:=Array(Array(1, 1), Array(2, 1)), _      TrailingMinusNumbers:=True End Sub なお、区切り位置の記録マクロは、場所をとりますが、あまりむやみに省略しないほうがよいです。見かけは、大したものに見えますが、本当に簡単に作れます。 たったひとつ LastCellというところがひとつの工夫です。

  • ASIMOV
  • ベストアンサー率41% (982/2351)
回答No.3

VBA の一例ということで... >A列をキーに、昇順 を、前提として -------------------------------- Sub TEST()   gyou = 1: owari = Range("A1").End(xlDown).Row   Do    If Cells(gyou, 1) = Cells(gyou + 1, 1) Then     Rows(gyou + 1).Select     Selection.Delete Shift:=xlUp     owari = Range("A1").End(xlDown).Row    Else     gyou = gyou + 1    End If   Loop While gyou <= owari End Sub

  • kigoshi
  • ベストアンサー率46% (120/260)
回答No.2

A列の値が同じであれば、B列の値も昇順に並んでいるという条件ならば、 つまり 2 a 2 b 2 a という並びはあり得なく、必ず 2 a 2 a 2 b となっている場合ならば以下の手順でいかがでしょうか。 1)C1セルに =IF(A1&B1=A2&B2,"▲削除行","") を入れて下までコピー。 2)C列全体を選択し、[Ctrl]+[C]、[編集]→[形式を選択して貼り付け]→[値]にチェック→[OK] 3)C列をキーに降順で並べ替え 4)「▲削除行」の行を削除

関連するQ&A