获取当前日期和返回值的整数?

时间:2019-06-11 22:32:42

标签: excel vba

我在第1行有这样的日期(mm / yy)
A B C D E F 1/19 2/19 3/19 4/19 5/19 6/19 ...

我希望VBA能够识别今天的日期并将其与当前列匹配并返回为整数。
忽略日期(仅匹配月份和年份)。

例如,如果今天是 4/13/2019 ,它将是 4 (D列)

我将在VBA中使用它,因为我将使用它来定义范围:
For today To x month

2 个答案:

答案 0 :(得分:-1)

OP似乎正在寻找VBA解决方案,因此这是替代方案。

我可以想到在VBA中完成此操作的几种完全不同的方法。您的问题不是很清楚您想要的最终结果是什么,但是似乎您正在寻找一个返回列号的函数-也许这样您就可以用来查明范围。

Function DateCol(ByVal InputDate As Date) As Long

    Dim colDate As Date
    colDate = InputDate - Day(InputDate) + 1

    Dim srcRng As Range
    Set srcRng = ThisWorkbook.Worksheets("Sheet1").Rows(1)

    DateCol = srcRng.Find(What:=colDate, LookAt:=xlWhole).Column

End Function

您只需输入一个输入日期,减去日期(然后加上1,因为该月的第一天不是0)。然后,您使用这个新日期并使用.Find()方法在工作表上查找包含日期的范围,最后使用.Column属性获取您要查找的数字。

这里是一个小样本用法:

Sub test()

    ' Example Usage
    Cells(10, DateCol(#6/11/2019#)).Value = "Test"

End Sub

在上面的测试子目录中,DateCol()函数将在示例工作表中返回6的值,从而得出结果:

Cells(10, 6).Value = "Test"

唯一的问题是此函数不包含任何错误处理。如果在.Find()中找不到日期,则会引发错误,因此请确保考虑到这一点。

此外,不要忘记更改此行以使用真实的工作表:

ThisWorkbook.Worksheets("Sheet1").Rows(1)

答案 1 :(得分:-2)

弄乱数据后,我不得不重做我的答案。这就是我最后得到的。

在第1行上,我输入的日期为:1/1 / 2019、2 / 1 / 2019、3 / 1/2019 ...,并且自定义格式,仅将行显示为mm / yy。

使用下面的公式,我将从给定日期获取月份和年份,并将其转换为月份的第一天。我非常肯定,有更好的方法可以做到这一点,但我的大脑一天都在炸。

=MATCH(NUMBERVALUE(TEXT(A3,"mm")&"/1/"&TEXT(A3,"yy")),$1:$1,0)

编辑:(编辑公式以使其永久存在于第1行[$ 1:$ 1])

假定日期4/13/2019在单元格A3上

enter image description here