如何在Excel中直接跳转特定的Cell

时间:2017-11-02 03:26:21

标签: excel excel-vba excel-2010 vba

早上好/下午/晚上到所有人:)

我第一次来这里....................:)

Spreadsheet Example

我在“条件格式”中使用此代码

=AND(ISNUMBER(SEARCH($B$3,A6)),$B$3<>””)

因此我只能在屏幕截图上突出显示单元格(每当在B3上键入文本时,它会自动突出显示包含Cell的屏幕截图)但我想要的是它只突出显示单元格但不能跳转当我在搜索B3框中键入“”text“”时(选择)单元格。

例如:在屏幕截图中我键入DW353,它在A18 Cell No.上的Redcolor中突出显示,但是如果我键入其他文本为DW364,365,并且在A24,A25上并继续向下,则仅突出显示特定的Cell我必须搜索(向上和向下滚动)以查看RED突出显示。我想要的是每当我在B3上键入“文本”时它突出显示并直接将包含单元格跳转为(查找和替换)。

先谢谢你,很抱歉很长的问题:)

1 个答案:

答案 0 :(得分:0)

实现此类功能的最简单方法是使用VBA触发高级过滤器功能,以便隐藏所有其他行。

以下是:

  1. 添加名为“MyList”的命名范围,覆盖要筛选的MACHINE NO:列中的整个数据范围。 (如果您将此数据块转换为Excel表格,然后仅引用MACHINE NO列,则最佳,因为这将意味着命名范围是动态的,即如果基础数据增长,它将自动调整。)
  2. 将文本“MACHINE NO:”放入B2
  3. 添加名为“Criteria”的名称范围,涵盖B2:B3
  4. 添加名为“输入”的命名范围,涵盖B3
  5. 这应该如下所示:

    enter image description here

    1. 将此代码放在与每机器运动标签对应的工作表模块中(而不是标准代码模块中):

      Option Explicit
      Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Intersect(Target, Range("Input")) Is Nothing Then
          On Error Resume Next
          ActiveSheet.ShowAllData
          On Error GoTo 0
          Range("MyList").AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("Criteria"), Unique:=False
      End If
      
      End Sub
      

      End Sub

    2. 即。像这样:

      enter image description here

      现在,只要有人输入机器编号,工作表就会被过滤以显示感兴趣的行:

      enter image description here

      您可以在Daniel Ferry的优秀博客中找到一个有效的例子,链接如下: http://www.excelhero.com/blog/2010/07/excel-partial-match-database-lookup.html

      查找他在标题--- UPDATE ---

      下发布的第二个样本文件

      根据您的后续问题,可以调整此方法以搜索多个列。首先,这是命名范围的设置(包括输入单元格上方的一个名为“Header”的新范围):

      enter image description here

      ......这是修改后的代码:

      Option Explicit
      Private Sub Worksheet_Change(ByVal Target As Range)
      
      Dim vRanges As Variant
      Dim vItem As Variant
      
      If Not Intersect(Target, Range("Input")) Is Nothing Then
          On Error GoTo errhandler
          With Application
              .EnableEvents = False
              .ScreenUpdating = False
              .Calculation = xlManual
          End With
      
          'Clear any existing filter
          On Error Resume Next
          ActiveSheet.ShowAllData
          On Error GoTo 0
      
          'Cycle through the search arrays one by one, and run the advanced filter until you find a match
          vRanges = Array("Range1", "Range2", "Range3", "Range4") '<<< Change these to match your range names
      
          For Each vItem In vRanges
              Range("Header") = Range(vItem).Cells(1)
              Range(vItem).AdvancedFilter Action:=xlFilterInPlace, CriteriaRange:=Range("Criteria"), Unique:=False
              If Range(vItem).SpecialCells(xlCellTypeVisible).Count > 1 Then Exit For
          Next vItem
      errhandler:
          With Application
              .EnableEvents = True
              .ScreenUpdating = True
              .Calculation = xlAutomatic
          End With
      
      End If
      
      End Sub
      

      这里有一些屏幕截图显示它在不同的列上匹配:

      enter image description here

      enter image description here

      您可以格式化单元格B2,以便在需要时无法看到它。

      我建议在设置“RangeX”命名范围之前,将工作簿中的不同输入区域转换为Excel表格(也称为ListObjects)。这是因为在幕后,表基本上是动态命名范围,自动扩展以适应新数据。因此,如果您随后手动设置指向“表”列的“命名范围”,则无需记住调整“命名范围”以处理新数据,因为“表”会自动为您执行此操作。见下图:

      enter image description here

      请注意,您可以使用功能区中的“表格样式”选项更改“表格”的格式,甚至可以完全关闭格式:

      enter image description here