Excel VBA将variables设置为date之间的相等值

在Excel中使用VBA,我需要设置一个variables等于一个开始和结束date之间的所有date列表(类似于等于包含多个值的范围)。 捕获只是开始和结束date在一个范围内,而不是在两者之间的值。

在SQL Server中,我使用Sys.Columns表生成两个date之间的date列表,这些date实际上并不存储在该表中。 有没有办法在这里做类似的事情,而没有每个date之间的开始和结束date写在某个地方? 我GOOGLE了几个小时,没有find任何关于如何做到这一点。

我试图做的是有一个variables,我可以做一个For Each循环。 所以对于每一个date,我会检查它是否存在于另一个工作表中,如果它什么都不会发生,如果它不会被添加。

我试过了:

Dim DatesInSettings As Date DatesInSettings = StartDate To EndDate For Each Date In DatesInSettings 'Insert commands here Next DatesInSetting 

但这显然不是答案。 帮帮我?

这将在Sheet1上查找Sheet1上开始date和结束date之间的date – 在单元格A1和B1中:

 Sub RunDates() Dim StartDate As Date Dim EndDate As Date Dim i As Date StartDate = Sheet1.Range("A1") EndDate = Sheet1.Range("B1") For i = StartDate To EndDate If WorksheetFunction.CountIf(Sheet2.Range("A1:A5"), i) > 0 Then Debug.Print i; "- date found" Else Debug.Print i; "- date not found" End If Next i End Sub 

以下子例程调用将存储两个给定端点之间的所有date的字典。 然后,它使用简单的存在比较来检查列表中的date是否在字典的项目内。 如果不是,它会打印出来,因为不在列表中。

根据您的需要进行相应的修改。 ;)

码:

 Sub GetListOfDates() Dim StartDate As Date, EndDate As Date Dim DictOfDates As Object, DateToCheck As Variant, ListOfDates As Variant Dim Iter As Long Set DictOfDates = CreateObject("Scripting.Dictionary") StartDate = "12/31/2013" EndDate = "01/15/2014" For Iter = StartDate + 1 To EndDate - 1 With DictOfDates If Not .Exists(Iter) Then .Add Iter, Empty End If End With Next Iter '--Print them somewhere. 'Range("A1").Resize(DictOfDates.Count, 1).Value = Application.Transpose(DictOfDates.Keys) ListOfDates = Range("B1:B15").Value For Each DateToCheck In ListOfDates If Not DictOfDates.Exists(DateToCheck) Then Debug.Print Str(DateToCheck) + " is not in the list!" '--Or whatever action you want. End If Next DateToCheck Set DictOfDates = Nothing End Sub 

让我们知道这是否有帮助。 🙂

我用vector解决了它。

我希望它有帮助

 Sub Dates_Vector() Public Dates() As Date ReDim Dates(End_Dat - Start_Date) For x = 0 To End_Dat - Start_Date Dates(x) = Dat_Ini + x Next x For Each Date In Dates 'Insert commands here Next Date End Sub