人们在Excel工作表中保留客户信息并不稀奇。如果您有一个包含所有客户端名称的工作表,而另一个包含活动客户端名称的工作表,则可能要使用Excel的功能来发现谁是非活动客户端。

有几种方法可以完成此任务。首先是通过使用VLOOKUP。只要您的客户列表按字母顺序排列,此工作表功能就可以很好地工作。使用该功能的一种方法是在“所有客户”中添加状态列

工作表。首先,请确保选择活动客户端并将其命名为“活动”。 (其他_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

该宏对要检查的数据做出了一些假设。

首先,假定“所有客户”工作表是第一个工作表,而“活动客户”工作表是第二个工作表。此外,假定第三个工作表为空白,并且最终将包含非活动客户端列表。此外,假设列A包含唯一的客户端ID号,列B包含客户端的名称。宏完成后,第三个工作表将包含客户端编号和所有非活动客户端的名称。

注意:

如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。

_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。

本技巧(2053)适用于Microsoft Excel 97、2000、2002和2003。