如何在VBA For Each循环中获取索引(使用Excel编程)?

时间:2013-07-11 07:48:46

标签: vba excel-vba excel

我正在使用EXCEL VBA来处理一些数据,这就是我想要做的:

I want to develop a function that can calculate out the values in the light-green area

在这个工作表中,我想创建一个函数“GetDebutDate”,它可以自动计算该行具有值的第一个日期。

例如,在“Mark”行中,第一次获取值是05年8月,数字为“4”。

我对VBA知之甚少,在搜索后我发现我可以使用For ... Each在一个范围内循环。但是如何在每个循环中获得“v”的索引?获得该索引后,如何获得头行中Date的值?

Function Get_Board_Count(range As range)
  For Each v In range
    ....
  Next
  Get_Board_Count = ....
End Function

3 个答案:

答案 0 :(得分:4)

Function Get_Board_Count(range As range)
    dim i as integer
    i = 1

    for each v in Range
       ...
       i = i + 1
    next


  Get_Board_Count = i 'Index of the item where cell is found.
End Function

答案 1 :(得分:2)

使用For Each时,对获取对象的顺序做出任何假设都不是一个好主意:它可能会在后续Excel版本中更改,甚至可能会在会话之间发生变化。

但是,v是对范围本身的引用,因此您可以通过它访问Excel.Range的属性和方法。使用v.Column提取特定v所引用的列;这将是包含相应日期的列。

答案 2 :(得分:1)

您也可以使用不需要VBA编程的Excel-Only解决方案。看看这个公式:

=INDIRECT(ADDRESS(1,MATCH(TRUE,INDEX(A2:E2>0,0),0)))

MATCH(TRUE,INDEX(A2:E2>0,0),0)查找第一个大于0且不为null的值,并返回该值的当前列索引。公式的其余部分引用具有日期的行,以获得每个引用的所需日期。在我的情况下,它是第一行......