リスト間の違いを見つける(Microsoft Excel)
クライアント情報をExcelワークシートに保持することは珍しいことではありません。すべてのクライアントの名前を含むワークシートと、アクティブなクライアントの名前を含む別のワークシートがある場合は、Excelの機能を使用して、非アクティブなクライアントが誰であるかを検出できます。
このタスクを実行する方法はいくつかあります。 1つ目は、VLOOKUPの使用によるものです。このワークシート機能は、クライアントのリストがアルファベット順に並べられている場合にうまく機能します。この関数を使用する1つの方法は、「すべてのクライアント」にステータス列を追加することです
ワークシート。まず、アクティブなクライアントを選択し、「アクティブ」という名前を付けてください。 (選択したセル範囲の名前を定義する方法については、他の_ExcelTipsで説明しています。_)次に、クライアントの完全なリストで、既存のデータの右側に列(Statusという名前)を追加します。 [ステータス]列のセルで、次の数式を使用します。
=IF(ISNA(VLOOKUP(A2,Active,1,FALSE)),"Inactive","Active")
この式は、クライアントの名前が現在のワークシートの列Aにあることを前提としています。式の結果は、A2の名前とアクティブリストの名前の間に一致があるかどうかに応じて、「アクティブ」または「非アクティブ」のいずれかになります。
[ステータス]列を配置したら、Excelのオートフィルター機能を使用して、ステータス列に基づいてリストをフィルター処理できます。その後、必要に応じて、非アクティブなクライアントを簡単に表示できます。
上記の例ではVLOOKUPワークシート関数を使用していますが、HLOOKUPやMATCHなどの関数を使用する他の数式も同じように簡単に作成できることに注意してください。どちらを使用するかは、個人的な好みとデータのレイアウト方法によって異なります。
別の解決策は、マクロを使用して、「すべてのクライアント」リストの各名前を「アクティブなクライアント」リストの名前と比較することです。一致するものが見つからない場合は、名前を「非アクティブなクライアント」に安全に追加できます
リスト。次のマクロはまさにそれを行います:
Sub ListInactive() Dim cell As Range Dim SearchRng As Range Set SearchRng = Worksheets("Sheet2").Range("A:A") Counter = 1 'First row on Sheet3 contains headings For Each cell In Worksheets("Sheet1") .Range("A2:A1000") _ .SpecialCells(xlCellTypeConstants) ID = cell 'Client ID NM = cell.Offset(0, 1) 'Client name MatchRow = 0 On Error Resume Next MatchRow = WorksheetFunction.Match(ID, _ SearchRng, 0) On Error GoTo 0 If MatchRow = 0 Then Counter = Counter + 1 Worksheets("Sheet3").Cells(Counter, 1) = ID Worksheets("Sheet3").Cells(Counter, 2) = NM End If Next cell End Sub
マクロは、調査対象のデータについていくつかの仮定を行います。
まず、「すべてのクライアント」ワークシートが最初のワークシートであり、「アクティブクライアント」ワークシートが2番目であると想定しています。また、3番目のワークシートは空白であり、非アクティブなクライアントのリストが含まれることになります。さらに、列Aには一意のクライアントID番号が含まれ、列Bにはクライアントの名前が含まれていると想定しています。マクロが終了すると、3番目のワークシートには、非アクティブなすべてのクライアントのクライアント番号と名前が含まれます。
注:
このページ(または_ExcelTips_サイトの他のページ)で説明されているマクロの使用方法を知りたい場合は、役立つ情報を含む特別なページを用意しました。
_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。
このヒント(2053)は、Microsoft Excel 97、2000、2002、および2003に適用されます。