找到一个数首次出现的行索引

24

我有一个列A,其中的值是随机排列的,例如:

       A column
           2
           3
           4
           2
           5
           6
           4
           3
           4

我想要特定数字第一次出现的行索引。比如我要找的数字是4,那么返回的值应该是3。

我还想要特定数字最后一次出现的行索引。比如我要找的数字是3,那么返回的值应该是8。

我曾考虑使用Vlookupfind函数来完成任务,但无法正确使用,请帮忙解决这个问题。


我认为你需要循环遍历列值。 - chance
@chance,感谢你的帮助,但我知道这一点,不过我相信肯定有一个内置函数,可能是find函数,比循环更优化。 - niko
2个回答

50

我的示例正在寻找数字3,但很容易进行调整。

要找到第一个出现的位置,您可以使用:

=MATCH(3,A:A,0)
为了找到最后一个,你可以使用一个数组公式(使用Ctrl+Shift+Enter进行验证)。
{=MAX(IF(A1:A10=3,ROW(A1:A10),0))}

注意,你也可以在第一个公式中使用带有MIN的数组公式,但这样做可能会很复杂,得不偿失。


如果您需要在不同的“部分”或组中重复查找相同的文本,可以将A:A替换为另一个MATCH和INDIRECT的某种组合。 - tbone

2

你可以使用宏来完成这个任务。

请使用以下代码:

Sub FindNumbers()

    Sheet1.Range("B:D") = ""
    Application.ScreenUpdating = False
    tot = Sheet1.Range("A1048575").End(xlUp).Row
    i = 1
    k = 1
    m = 1
    n = 1
    o = 1
    p = 1

    For i = 1 To tot
            c = Application.WorksheetFunction.CountIf(Sheet1.Range("B:B"), Sheet1.Range("A" & i).Value)
            If c <= 0 Then
            Sheet1.Range("B" & k).Value = Sheet1.Range("A" & i).Value
            k = k + 1
            End If
    Next

    tots = Sheet1.Range("B1048575").End(xlUp).Row

    For m = 1 To tots
        For n = 1 To tot
            If Sheet1.Range("B" & m).Value = Sheet1.Range("A" & n).Value Then
            Sheet1.Range("D" & m).Value = n
            End If
        Next
    Next

    For o = 1 To tots
        For p = 1 To tot
            If Sheet1.Range("B" & o).Value = Sheet1.Range("A" & p).Value Then
            Sheet1.Range("C" & o).Value = p
            p = tot
            End If
        Next
    Next

    Application.ScreenUpdating = True

End Sub

如何使用代码?(如果您是宏的新手)
  1. 打开一个新的Excel文件
  2. 按下Alt + F11
  3. 插入一个新模块
  4. 将代码粘贴到模块中
  5. 返回Excel工作表并添加一个按钮
  6. 将宏“FindNumbers”分配给按钮
  7. 如果您正在使用Excel 2007或2010,请以.xlsm格式保存Excel
  8. 帮助
  9. 列A:在列A中输入数据,然后单击按钮或运行宏
  10. 按下按钮或运行宏

您的结果将如下所示:

列B:数据中唯一的数字

列C:数据的第一次出现

列D:数据的最后一次出现


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接