重複する列の削除(Microsoft Excel)
Drorには、かなりの量のデータを含むワークシートがあります。ある列のデータが別の列のデータとまったく同じになる可能性があるため、ワークシート内の重複する列を簡単に削除する方法があるかどうか疑問に思います。
もちろん、最初のステップは、2つの列が同一であるかどうかを判断することです。これは、次のような配列数式を使用してかなり簡単に決定できます。
=AND(A1:A100=B1:B100)
(配列数式はShift + Ctrl + Enterを使用して入力することに注意してください。)
数式は、列AとBの最初の100行のすべての値を比較します。それらがすべて同じである場合、数式はTRUEを返します。いずれかのセルが一致しない場合、数式はFALSEを返します。結果がTRUEの場合、列が同じであるため、列の1つを削除できます。
もう少し自動化されたもの、つまり重複する列が削除されるものが必要な場合は、マクロを使用する必要があります。次の手順では、ワークシートのすべての列を調べ、右端の列から始めて、すべての列を比較します。ワークシート内の順序に関係なく、同じものがある場合、マクロは重複する列を削除するかどうかを尋ねます。
Sub DeleteDuplicateColumns() Dim rngData As Range Dim arr1, arr2 Dim i As Integer, j As Integer, n As Integer On Error Resume Next Set rngData = ActiveSheet.UsedRange If rngData Is Nothing Then Exit Sub n = rngData.Columns.Count For i = n To 2 Step -1 For j = i - 1 To 1 Step -1 If WorksheetFunction.CountA(rngData.Columns(i)) <> 0 And _ WorksheetFunction.CountA(rngData.Columns(j)) <> 0 Then arr1 = rngData.Columns(i) arr2 = rngData.Columns(j) If AreEqualArr(arr1, arr2) Then With rngData.Columns(j) 'mark column to be deleted .Copy If MsgBox("Delete marked column?", vbYesNo) _ = vbYes Then rngData.Columns(j).Delete Else 'remove mark Application.CutCopyMode = False End If End With End If End If Next j Next i End Sub
Function AreEqualArr(arr1, arr2) As Boolean Dim i As Long, n As Long AreEqualArr = False For n = LBound(arr1) To UBound(arr1) If arr1(n, 1) <> arr2(n, 1) Then Exit Function End If Next n AreEqualArr = True End Function
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(5674)は、Microsoft Excel 2007、2010、2013、2016、2019、およびOffice 365のExcelに適用されます。Excelの古いメニューインターフェイス用のこのヒントのバージョンは、次の場所にあります。