比较列并输出值

时间:2018-07-26 16:36:37

标签: excel vba excel-formula

基于包含发布名称和更改日期的字段,我需要确定在发布过程的哪个阶段发生了更改。

在下面的示例中,更改发生在一月分析阶段。我需要做几百遍。

系统会为您提供月份和日期。

您将看到月份,阶段和日期范围(开始和计算结束)。月和日期范围用于确定阶段。因此,对于1月10/10/17日是在1月10/9/17-11/5/2017年之间,这将使其进入分析阶段。

下面是指向如何确定舞台和设置电子表格的图像的链接。

阶段确定
Phase Determination

Release   Change Date
January   10/10/2017

Release   Stage                Start        Calculation End
January   Form Release         8/14/2017    9/10/2017
January   Requirements Review  9/11/2017    10/8/2017
January   Analysis             10/9/2017    11/5/2017
January   Development          11/6/2017    12/10/2017
January   Functional Test      12/11/2017   12/17/2017
January   QA                   12/18/2017   1/7/2018
January   Live                 1/7/2018     1/7/2018
February  Form Release         9/11/2017    10/8/2017
February  Requirements Review  10/9/2017    11/5/2017
February  Analysis             11/6/2017    12/10/2017
February  Development          12/11/2017   1/7/2018
February  Functional Test      1/8/2018     1/14/2018
February  QA                   1/15/2018    2/11/2018
February  Live                 2/11/2018    2/11/2018

参考错误 Reference Errore

计算公式
Evaluate Formula

2 个答案:

答案 0 :(得分:0)

您可以使用VBA宏遍历表中的行,并查找与条件匹配的行。下面是一些将要执行的VBA,您可以修改此代码以使用单元格引用作为输入,并根据需要使用搜索范围来代替ActiveSheet.UsedRange。

Sub getStage()
    Dim release As String
    release = "January"
    Dim eventDate As Date
    eventDate = "2017-10-10"

    For Each Row In ActiveSheet.UsedRange.Rows
        If (Row.Cells(1, 1) = release And Row.Cells(1, 3) <= eventDate And Row.Cells(1, 4) >= eventDate) Then
            Debug.Print (Row.Cells(1, 2))
        End If
    Next
End Sub

答案 1 :(得分:0)

据我所知,这是相对简单的方法。

  1. 为每个月创建一个命名范围-例如在屏幕快照中,“一月”对应于A2:D8,“二月”对应于A9:D15
  2. 然后使用INDIRECT引用该命名范围,并使用INDEXMATCH返回阶段。在MATCH函数中,您将使用INDEXINDIRECT来获取“ January”范围的第三列(开始),您将尝试在其中匹配日期。 match_type 参数(MATCH的第3个参数)为1,表示它找到小于查询值 的最大值。这将为您提供行号。然后在最外面的INDEX公式中,列号为2(“阶段”列)。

这是H2中的公式:

=INDEX(INDIRECT(F2),MATCH(G2,INDEX(INDIRECT(F2),,3),1),2)

enter image description here