在excel中,如何确定一个月从哪一行开始,在哪一行结束?

在excel中,如何确定一个月从哪一行开始,在哪一行结束?,excel,Excel,在Excel中,我有一张类似于银行对账单的表格,其中一列是交易日期,然后是金额和其他详细信息的其他列。这张表是按日期排序的。主要需求是我需要一个函数来确定月份开始和结束的行。问题是,业务需要更改有时要追溯到几个月前,添加几行,或删除一些行,因此接下来几个月的月份位置会不断更改。问题是如何在excel中确定一个月从哪一行开始,在哪一行结束?将我们的数据如下所示: 我们想要2020年10月的开始行和结束行 首先在标准模块中输入以下用户定义的函数: Public Function FirstRow(

在Excel中,我有一张类似于银行对账单的表格,其中一列是交易日期,然后是金额和其他详细信息的其他列。这张表是按日期排序的。主要需求是我需要一个函数来确定月份开始和结束的行。问题是,业务需要更改有时要追溯到几个月前,添加几行,或删除一些行,因此接下来几个月的月份位置会不断更改。问题是如何在excel中确定一个月从哪一行开始,在哪一行结束?

将我们的数据如下所示:

我们想要2020年10月的开始行和结束行

首先在标准模块中输入以下用户定义的函数:

Public Function FirstRow(rng As Range, mnth As Long, yr As Long) As Long
    Dim r As Range, v As Date
    For Each r In rng
        v = r.Value
        If Month(v) = mnth And Year(v) = yr Then
            FirstRow = r.Row
            Exit Function
        End If
    Next r
    FirstRow = 0
End Function


Public Function LastRow(rng As Range, mnth As Long, yr As Long) As Long
    Dim r As Range, v As Date, boo As Boolean, i As Long, kol As Long
    
    boo = False
    
    For Each r In rng
        v = r.Value
        If Month(v) = mnth And Year(v) = yr Then
            boo = True
        End If
        If boo Then
            If Month(v) <> mnth Or Year(v) <> yr Then
                LastRow = r.Row - 1
                Exit Function
            End If
        End If
    Next r
    LastRow = 0
End Function

用户定义函数(UDF)非常易于安装和使用:

  • ALT-F11将显示VBE窗口
  • ALT-I ALT-M打开一个新模块
  • 粘贴内容并关闭VBE窗口
  • 如果保存工作簿,则自定义项将与工作簿一起保存。 如果在2003年以后使用Excel版本,则必须保存 文件的格式为.xlsm而不是.xlsx

    要删除自定义项,请执行以下操作:

  • 如上所述打开VBE窗口
  • 清除代码
  • 关闭VBE窗口
  • 使用Excel中的自定义项,请执行以下操作:

    =myfunction(A1)

    要了解有关宏的更多信息,请参阅:

    有关自定义项的详细信息,请参见:


    必须启用宏才能使其工作

    简单的
    Month()
    Excel函数怎么样?您可以创建一个helper列,其中包含所述日期的月份,并在该列上放置一个自动筛选。您可以根据自己喜欢的任何月份进行筛选,并且可以在屏幕上看到开始行和结束行。您不需要为此编写任何程序。

    您可以使用工作表公式执行此操作

    • 月开始日期行:

      =AGGREGATE(15,6,1/((MONTH(Dates)=D2)*(YEAR(Dates)=E2))*ROW(Dates),1)
      
    • 月结束日期行

       =AGGREGATE(14,6,1/((MONTH(Dates)=D2)*(YEAR(Dates)=E2))*ROW(Dates),1)
      
    在屏幕截图中,月份开始以绿色突出显示;这个月以红色结尾


    注意:如果有重复的开始或结束日期,则检测到的行将是第一个开始日期或最后一个结束日期。如果这不是您想要的,请澄清。

    日期是否可以在日期列中多次出现?此聚合功能工作正常,谢谢Ron@AymanBasalamah很乐意帮忙。既然我的回答似乎是你所需要的,请注明接受。看见
     =AGGREGATE(14,6,1/((MONTH(Dates)=D2)*(YEAR(Dates)=E2))*ROW(Dates),1)