Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 是否获取当前日期并返回整数?_Excel_Vba - Fatal编程技术网

Excel 是否获取当前日期并返回整数?

Excel 是否获取当前日期并返回整数?,excel,vba,Excel,Vba,我在第一行有一个这样的日期 A B C D E F 1/19 2/19 3/19 4/19 5/19 6/19 我希望VBA能够识别今天的日期,并将其与当前列匹配,然后以整数形式返回。 忽略仅匹配月份和年份的天数 例如,如果今天是2019年4月13日,它将是4列D 我需要在VBA中使用它,因为我将使用它定义一个范围: 从今天到x月我在弄乱了数据后不得不重做我的答案。这就是我的结局 在第1行,我输入的日期为:2019年1月1日、2019年2月1日、2019年3月1日。。。并自定义格式化该行,使其仅

我在第一行有一个这样的日期 A B C D E F 1/19 2/19 3/19 4/19 5/19 6/19

我希望VBA能够识别今天的日期,并将其与当前列匹配,然后以整数形式返回。 忽略仅匹配月份和年份的天数

例如,如果今天是2019年4月13日,它将是4列D

我需要在VBA中使用它,因为我将使用它定义一个范围:
从今天到x月

我在弄乱了数据后不得不重做我的答案。这就是我的结局

在第1行,我输入的日期为:2019年1月1日、2019年2月1日、2019年3月1日。。。并自定义格式化该行,使其仅显示为mm/yy

根据下面的公式,我从给定日期获取月份和年份,并将其转换为月份的第一个。我很肯定有更好的方法,但我的脑子一整天都在紧张

=MATCHNUMBERVALUETEXTA3,mm&/1/&TEXTA3,yy,$1:$1,0

编辑:编辑公式,使其永久位于第1行[$1:$1]

假设2019年4月13日在单元格A3上


看起来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
在上面的test sub中,DateCol函数将在示例工作表中返回值6,从而得出以下结果:

Cells(10, 6).Value = "Test"
唯一的问题是这个函数不包含任何错误处理。如果在.Find中找不到日期,则会引发错误,因此请确保将此考虑在内

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

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

使用匹配。第1行中的日期是实际日期格式为显示mm/yy还是以文本形式输入的?它的格式为dd/mm/yyy,但显示的格式类似于mm/yy,然后是application.matchCLngDate,第1行,0@Rory,所以我把RangeA2=Application.MatchCLngDate,Rows1,0我得到N/A…我认为更简单的方法是=MATCHA3,$1:$1,1,因为日期是按升序排列的。2019年4月13日只是一个例子。需要取消今天的日期2019年11月6日今天的日期应该被烘焙成一个公式。返回6列,FCan我们可以使用EOMONTH函数来表示日期吗?我想你可以使用colDate=WorksheetFunction.EoMonthInputDate,-1+1来代替colDate=InputDate-DayInputDate+1,但不确定它是否真的会产生很大的差异。因此,DateCol将返回一个整数值?所以我可以用它来表示DateCol到DateCol+6,基本上从今天到6个月,6/19~1/20,是的,这是正确的。但它需要一个参数,日期。对于i=DateColDate到DateColDate+6。日期不仅是一种数据类型,它还是一个VBA函数,返回今天的日期,与今天的工作表函数相同。