3

我需要编写一个宏来根据值查找单元格范围。一列将在一行中具有相同的值,我需要找出在一行中具有相同值的第一列和最后一列是什么。在此处输入图像描述

所以宏需要找到“Jill Cross”的范围是a4到a9

到目前为止,我没有太多,有办法找到第一次出现的值

   Function GetFirstCell(CellRef As Range)
   Dim l As Long
   l = Application.WorksheetFunction.Match(CellRef.Value, Range("A1:A10000"), 0)
   GetFirstCell = l
   End Function

现在我需要以某种方式遍历下一行以返回事件的最后一行

4

2 回答 2

5

如果您的第一个单元格在排序列表中,则 countif 函数将轻松为您提供最后一个单元格。

   Function GetFirstCell(CellRef As Range) as long
       Dim l As Long
       l = Application.WorksheetFunction.Match(CellRef.Value, Range("A1:A10000"), 0)
       GetFirstCell = l
   End Function

   function GetLastCell(cellRef as range, lFirstCell as long)
       Dim l As Long
       l = Application.WorksheetFunction.countif(Range("A1:A10000"), CellRef.Value)
       GetLastCell = lFirstCell+l-1
   End Function
于 2012-11-13T18:31:07.230 回答
-1

尽管它有其局限性(例如,如果名称未排序并且您要查找的名称在您的范围内的多个位置分隔...),但这将起作用。当然,您需要将范围替换为您要检查的范围,并将“bob”替换为您要查找的任何名称。此外,该列是静态的,因此您可能需要更改该部分。这是一个数组公式,因此您需要在公式栏中按 [ctrl]+[shift]+[enter] 来执行它。

="A"&MIN(IF(ROW(A1:A6)*(A1:A6="bob")=0, 99999999, ROW(A1:A6)*(A1:A6="bob")))&":A"&MAX(SI(ROW(A1:A6)*(A1:A6="bob")=0, -99999999, ROW(A1:A6)*(A1:A6="bob")))

于 2012-11-13T18:00:47.390 回答