テキストエントリのリストから重複するエントリを削除する必要性に、誰もが一度に遭遇します。ワークシートの列Aにテキスト値があり、それらが約500行実行されているとします。リスト内の重複を削除したい場合は、それを行う最も簡単な方法を探している可能性があります。実際、Excelでこのタスクを実行する方法は複数あります。

重複削除ツールの使用

おそらく最も簡単な方法は、重複を削除するデータを選択してから、リボンの[データ]タブを表示することです。 [データツール]グループの[重複の削除]ツールをクリックします。 Excelは、[重複の削除]ダイアログボックスを表示します。

[重複の削除]ダイアログボックスの優れている点は、データの各列の名前が一覧表示されることです。 (このツールは、データの最初の行に見出しラベルがあることを前提としています。)次に、重複をチェックする各列の横にチェックマークがあることを確認できます。 [OK]ボタンをクリックすると、データが分析され、重複する行が削除されます。 (ここでも、重複は、[重複の削除]ダイアログボックスで選択した列に基づいて決定されます。)

データフィルタリングの使用

別の手動の方法は、データフィルタリングを使用して一意の値を決定することです。列の上部にラベルが付いていることを確認してから、列のセルを選択します。リボンの[データ]タブを表示し、[並べ替えとフィルター]グループの[詳細]をクリックします。表示されるダイアログボックスのコントロールを使用して、指定した別の場所に一意の値をコピーすることを指定します。

数式の使用

数式を使用して、リスト内の重複を手動で判別することもできます。列の値を並べ替えてから、セルB2に次の数式を入力します。

=IF(A2=A1,"Duplicate","")

列Aに対応する値を持つ列Bのすべてのセルに数式をコピーします。列Bのすべての値を選択し、Ctrl + Cを押します。 [形式を選択して貼り付け]を使用して、選択した同じセルに値だけを貼り付けます。これで、数式が結果に変換されました。

列Bの内容に従って2つの列を並べ替えると、重複するすべての行が1つの領域に配置されます。これらの行を削除すると、一意の値のリストが完成します。

マクロの使用

手動によるアプローチは高速で簡単ですが、列から重複する値を定期的に削除する必要がある場合は、マクロの方が適している場合があります。

次のマクロは、以前の手動による方法と同様に、データフィルタリングに依存しています。

Sub CreateUniqueList()

Dim rData As Range     Dim rTemp As Range

Set rData = Range(Range("a1"), Range("A1048576").End(xlUp))

rData.EntireColumn.Insert     Set rTemp = rData.Offset(0, -1)

rData.AdvancedFilter _         Action:=xlFilterCopy, _         CopyToRange:=rTemp, _         Unique:=True

rTemp.EntireColumn.Copy _         rData.EntireColumn     Application.CutCopyMode = False     rTemp.EntireColumn.Delete     Set rData = Nothing     Set rTemp = Nothing End Sub

マクロは一時列を作成し、高度なフィルタリングを使用して一意の値をその列にコピーしてから、元のデータ列を削除します。

結果は列Aの一意の値になります。マクロでExcelのデータフィルタリング機能を使用したくない場合は、次のはるかに短いマクロでうまくいきます。

Sub RemoveDups()

Dim rData As Range

Set rData = Range(Range("a1"), Range("A1048576").End(xlUp))

rData.RemoveDuplicates Columns:=Array(1), Header:=xlYes End Sub

このマクロの鍵は、RemoveDuplicatesメソッドを使用することです。このメソッドは、重複をチェックする列番号を含む配列に依存しています。ここに示すマクロは、列Aの内容に対してのみ機能しますが、複数の列のデータを処理するように簡単に変更できます。より大きなデータ領域を表すようにrDataを変更してから、チェックする列を指すようにcolumnsパラメーターを変更するだけです。

rData.RemoveDuplicates Columns:=Array(1,4), Header:=xlYes

別のマクロベースのアプローチは、次の方法でデータセットの値をチェックする独自のコードを開発することです。

Sub DelDups()

Dim rngSrc As Range     Dim NumRows As Integer     Dim ThisRow As Integer     Dim ThatRow As Integer     Dim ThisCol As Integer     Dim J As Integer, K As Integer

Application.ScreenUpdating = False     Set rngSrc = ActiveSheet.Range(ActiveWindow.Selection.Address)



NumRows = rngSrc.Rows.Count     ThisRow = rngSrc.Row     ThatRow = ThisRow + NumRows - 1     ThisCol = rngSrc.Column

'Start wiping out duplicates     For J = ThisRow To (ThatRow - 1)

If Cells(J, ThisCol) > "" Then             For K = (J + 1) To ThatRow                 If Cells(J, ThisCol) = Cells(K, ThisCol) Then                     Cells(K, ThisCol) = ""

End If             Next K         End If     Next J

'Remove cells that are empty     For J = ThatRow To ThisRow Step -1         If Cells(J, ThisCol) = "" Then             Cells(J, ThisCol).Delete xlShiftUp         End If     Next J     Application.ScreenUpdating = True End Sub

マクロは、呼び出す前に行った選択に対して機能します。したがって、範囲A2:A974から重複セルを削除する必要がある場合は、その範囲を選択してからマクロを実行するだけです。マクロが完了すると、空白のセルと同様に、重複するセルが削除されます。

注:

このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(12711)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。