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

手動で、データフィルタリングを使用して一意の値を決定できます。

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

数式を使用して、リスト内の重複を手動で判別することもできます。列の値を並べ替えてから、セル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("A65536").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 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トレーニングのソースです。

このヒント(2430)は、Microsoft Excel 97、2000、2002、および2003に適用されます。Excel(Excel 2007以降)のリボンインターフェイス用のこのヒントのバージョンは、次の場所にあります。