代码之家  ›  专栏  ›  技术社区  ›  Sagar Rana

如何直接跳转Excel中的特定单元格

  •  0
  • Sagar Rana  · 技术社区  · 7 年前

    大家早上/下午/晚上好:)

    我第一次来这里是

    Spreadsheet Example

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

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

    所以我只能在屏幕截图上突出显示单元格(无论何时键入 文本 在B3上,它会自动高亮显示包含单元格(如屏幕截图所示),但我想要的是,当我在搜索B3框中键入“text”时,它只高亮显示单元格,而不能跳转(选择)单元格。

    例如:在屏幕截图上,我键入DW353,它在A18单元格编号上以红色突出显示。但如果我键入其他文本DW364、365,并且位于A24、A25上,然后继续向下,它只突出显示特定单元格,我必须搜索(上下滚动)红色突出显示。我想要的是,每当我在B3上键入“Text”时,它就会高亮显示,并直接跳转到包含单元格as(查找和替换)。

    提前感谢您,很抱歉提出了这么长的问题:)

    1 回复  |  直到 6 年前
        1
  •  0
  •   jeffreyweir    7 年前

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

    方法如下:

    1. 添加一个名为“MyList”的命名范围,覆盖要筛选的机器编号:列中的整个数据范围。(最好将此数据块转换为Excel表格,然后只引用MACHINE NO列,因为这意味着命名范围是动态的,即如果基础数据增长,它将自动调整)。
    2. 添加一个名为“标准”的命名范围,覆盖B2:B3
    3. 添加一个名为“输入”的命名范围,覆盖B3

    这应该如下所示:

    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
      

      末端接头

    i、 e.同样:

    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