web-dev-qa-db-ja.com

一部の列に基づいて重複行を削除する方法

重複する行を含むExcelシートがあります

A C D E F列が同じである行を削除したい(重複を計算している間はBを無視するが、行を削除している間は削除する)

現時点では、比較と削除の間、Bは無視されます。

11
user33949

Excel 2013で

  1. すべてのデータを選択
  2. [データ]タブを選択->重複を削除
  3. データに列ヘッダーがある場合は、[私の列にヘッダーがある]をオンにします。
  4. 比較で使用しないすべての列のチェックを外します
  5. OKを押します

できた

18
user33949

行1と2を前提として、私が正しく理解している場合、A1 = A2、C1 = C2、D1 = D2、E1 = E2およびF1 = F2の場合にのみ、行2を削除します。

これが私が思いついたものです。おそらくもっと短いかもしれませんが、それはトリックを行います:

Sub DeleteDuplicate()
Dim current As String
ActiveSheet.Range("A1").Activate
Do While ActiveCell.Value <> ""
    current = ActiveCell.Address
    ActiveCell.Offset(1, 0).Activate
    Do While ActiveCell.Value <> ""
        If ((ActiveSheet.Range(current).Value = ActiveCell.Value) And (ActiveSheet.Range(current).Offset(0, 2).Value = ActiveCell.Offset(0, 2).Value) And (ActiveSheet.Range(current).Offset(0, 3).Value = ActiveCell.Offset(0, 3).Value) And (ActiveSheet.Range(current).Offset(0, 4).Value = ActiveCell.Offset(0, 4).Value) And (ActiveSheet.Range(current).Offset(0, 5).Value = ActiveCell.Offset(0, 5).Value)) Then
            ActiveSheet.Rows(ActiveCell.Row).Delete
        Else
        ActiveCell.Offset(1, 0).Activate
        End If
    Loop
    ActiveSheet.Range(current).Offset(1, 0).Activate
Loop
End Sub

これは、評価されている行へのポインタとしてActiveCellを使用して残りのすべての行をループし、「元の」行のセルをcurrent変数に格納します。ループが終了すると、currentの下のセルがアクティブになり、内部の評価ループが再び開始されます。

私がどこかで失敗した場合は、遠慮なく教えてください:)

1
kenkh

この式を各行に追加します。 G列:

=IF(AND(A2=C2,A2=D2,A2=E2,A2=F2),"DELETE ME","")

これにより、次のような結果が得られます。

A   B   C   D   D   F   G
-   -   -   -   -   -   -
x   o   x   x   x   x   DELETE ME
x   x   x   x   x   o   
x   x   x   x   x   x   DELETE ME
x   o   o   x   x   x   

次に、「DELETE ME」という行の列Gにフィルターを作成し、それらを削除します。

1
Garrulinae

@ Garrulinae

私はあなたのアイデアをインスピレーションとして使用しました。行がたくさんあり、列の重複する値を含む行を削除したかったのです。その列の重複を削除を使用すると、行全体ではなく、列からデータのみが削除されます。テーブル全体から2行目と3行目をすべて削除する必要がありました。だから、私は新しい列を作り、最初の行の値を空のままにして、2番目と3番目の行の私を削除しました。次に、その特定の列の最初の3行(行全体ではなく)のみの値をコピーし、テーブルの列全体に貼り付けました。現在、列全体の2行目と3行目ごとに「私を削除」していました。次に、その列の値を並べ替えて、delete meを含むすべての行を削除する必要があります。 2番目、3番目、4番目、または2番目、3番目、4番目、5番目などを削除する場合は、同じソリューションを使用できます。

それが誰かを助けることを願っています...

0
Sunil