获取匹配的单元格列表(Microsoft Excel)
当Michael在Excel中执行“查找全部”操作时,该程序将有帮助地显示包含他要搜索的内容的所有单元格的列表。
Michael希望将该单元格地址列表复制到另一个工作表中,因此他想知道是否可以将列表复制到剪贴板中,以便将其粘贴到工作表中。
有几种方法可以完成此任务,其中大多数涉及宏的使用。但是,在介绍基于宏的方法之前,让我们看一下可以使用命名范围和名称管理器访问地址的方法:
。与以前一样使用FindAll,但不要关闭“查找和替换”对话框。
。在显示的地址列表中,滚动到底部,按住Shift键,然后单击最后一个匹配项。 Excel选择所有匹配的单元格。
。按Esc键关闭“查找和替换”对话框。匹配的单元格仍全部选中。
。在“名称”框中键入名称(在“公式”栏的左侧,在单元格A1的正上方)。这将创建一个包含所有选定单元格的命名范围。
。显示功能区的“公式”选项卡。
。单击“名称管理器”工具。 Excel将显示“名称管理器”对话框。 (请参见图1。)
。单击您在步骤4中创建的名称。 。单元格列表将在对话框底部的“引用到”框中。
此时,您可以将信息复制到“引用到”框中,然后将其粘贴到所需的任何位置(包括另一个工作表)。粘贴数据后,您需要稍微按摩一下数据,因为列表就是这样-单元地址的串行列表。
显然,这会影响您的工作簿,因为它会创建一个命名范围。如果您多次执行此操作,则会创建多个命名范围。
当然,如果您需要经常执行任务,这很快就会变得笨拙。这是宏解决方案起作用的地方。下面是一个宏的示例,该宏将搜索特定值,然后将包含该值的每个单元格的地址放入另一个工作表中。
Sub CellAdressList() Dim c1 As String Dim nxt As String Sheets("Sheet1").Select Range("A1").Select Cells.Find(What:="qrs", After:=ActiveCell, _ LookIn:=xlValues, LookAt:=xlWhole, _ SearchOrder:=xlByRows, SearchDirection:=xlNext, _ MatchCase:=False, SearchFormat:=False).Activate c1 = ActiveCell.Address Sheets("Sheet2").Select Range("A1").Select Range("A1").Value = c1 Do Until nxt = c1 Sheets("Sheet1").Select Cells.FindNext(After:=ActiveCell).Activate nxt = ActiveCell.Address Sheets("Sheet2").Select ActiveCell.Offset(1, 0).Select ActiveCell.Value = nxt Loop ActiveCell.Value = "" End Sub
宏进行一些假设。首先,假设您要在名为Sheet1的工作表上搜索信息。其次,假设您要在名为Sheet2的工作表中放置地址列表。最后,假设您要在Sheet1中搜索值“ qrs”。如果需要,可以更改宏的所有这些元素。
对于更灵活的东西,请考虑以下宏。假定您已经选择了包含所需值的所有单元格。 (换句话说,您需要在本技巧的开头附近执行步骤1到3。)然后,您可以运行宏。
Sub CopyFindAllSelection() Dim outcell As Range Dim c As Range Set outcell = Range("Sheet2!A1") For Each c In Selection outcell.Value = c.Address Set outcell = outcell.Offset(1, 0) Next End Sub
结果是将所选单元格的地址放入Sheet2工作表中。该宏稍微灵活一点,因为它允许您在任何工作表中查找任何内容。唯一的部分“硬编码”
是放置地址的工作表(Sheet2)。
注意:
如果您想知道如何使用此页面(或_ExcelTips_网站上的任何其他页面)中描述的宏,我准备了一个特殊页面,其中包含有用的信息。
链接:/ excelribbon-ExcelTipsMacros [点击此处在新的浏览器标签中打开该特殊页面]。
_ExcelTips_是您进行经济高效的Microsoft Excel培训的来源。
本技巧(13581)适用于Microsoft Excel 2007、2010、2013、2016、2019和Office 365中的Excel。