搜索标题的最后一个实例

时间:2018-11-05 16:12:24

标签: excel vba

我在工作表中有一个标题,所有标题都在第1行中。我需要搜索每个特定标题的最后一个实例。请在下面查看我正在查看的基本概念的屏幕截图。我需要宏来标识从左向右读取的“ dog”的最后一个实例,或从右向左读取的“ dog”的第一个实例,以两种方式返回I1的地址。其余标头也是如此,但是一旦有了功能正常的模板,我就可以处理。

我已经在线检查了一下,但看不到任何有效的方法。

Headers

2 个答案:

答案 0 :(得分:1)

在两种解决方案中,目标列都将存储为Range,这将允许您访问诸如Range.ColumnRange.RowRange.Address等属性。测试代码并正常工作


循环方法

Option Explicit

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim LCol As Long, MyCell As Range, Found As Range

LCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column

For Each MyCell In ws.Range(ws.Cells(1, 1), ws.Cells(1, LCol))
    If MyCell = "Dog" Then
        Set Found = MyCell
    End If
Next MyCell

If Not Found is Nothing Then MsgBox Found.Address(False, False)

End Sub

Range.Find方法

Option Explicit

Sub Test()

Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Sheet1")
Dim LCol As Long, Found As Range

LCol = ws.Cells(1, ws.Columns.Count).End(xlToLeft).Column
Set Found = ws.Range(ws.Cells(1, 1), ws.Cells(1, LCol)).Find("Dog", SearchDirection:=xlPrevious)

If Not Found Is Nothing Then MsgBox Found.Address(False, False)

End Sub

答案 1 :(得分:1)

公式方法

没有VBA的方法,使用数组公式返回

  • 列号:

    =MAX(IF(1:1="Dog",COLUMN(1:1)))
    
  • 或地址:

    =ADDRESS(1,MAX(IF(1:1="Dog",COLUMN(1:1))),4)
    

两者都需要通过 Ctrl + Shift + Enter 或( Cmd + Return确认(对于Mac)。