Excel VBA将变量设置为日期之间的相等值

时间:2014-01-03 03:31:51

标签: excel variables excel-vba vba

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

在SQL Server中,我使用了Sys.Columns表来生成实际上并未存储在该表中的两个日期之间的日期列表。有没有办法在这里做一些类似的事情,而不是在开始和结束日期之间写出某个日期?我用谷歌搜索了几个小时,没有找到任何关于如何做到这一点。

我试图做的是有一个变量我可以做For Each循环。因此,对于每个日期,我将检查它是否存在于另一个工作表中,如果它不会发生任何事情,如果不存在则会添加。

我试过了:

Dim DatesInSettings As Date
DatesInSettings = StartDate To EndDate

For Each Date In DatesInSettings
'Insert commands here
Next DatesInSetting

但这显然不是答案。帮助

3 个答案:

答案 0 :(得分:4)

这会在Sheet2中搜索Sheet1中的开始日期和结束日期之间的日期 - 在单元格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

答案 1 :(得分:1)

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

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

<强> CODE:

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

如果有帮助,请告诉我们。 :)

答案 2 :(得分:0)

我用矢量解决了它。

我希望它有所帮助

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