Excel VBA在列中查找一系列相同的值

时间:2012-11-13 16:28:11

标签: excel vba

我需要编写一个宏来查找基于值的单元格范围。一列中的行具有相同的值,我需要找出连续具有相同值的第一列和最后一列。enter image description here

所以宏需要找到“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

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-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")))