Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.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
Variables Excel VBA将变量设置为日期之间的相等值_Variables_Excel_Vba - Fatal编程技术网

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

Variables Excel VBA将变量设置为日期之间的相等值,variables,excel,vba,Variables,Excel,Vba,在使用VBA的Excel中,我需要将一个变量设置为等于开始日期和结束日期之间所有日期的列表(类似于等于包含多个值的范围)。捕获值仅为开始日期和结束日期在一个范围内,而不是介于两者之间的任何值 在SQLServer中,我使用Sys.Columns表生成了两个日期之间的日期列表,这些日期实际上并不存储在该表中。有没有一种方法可以在这里做类似的事情,而不用把开始日期和结束日期之间的每个日期都写在某个地方?我在谷歌上搜索了几个小时,没有找到任何关于如何做到这一点的信息 我试图做的是为每个循环设置一个变量

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

在SQLServer中,我使用Sys.Columns表生成了两个日期之间的日期列表,这些日期实际上并不存储在该表中。有没有一种方法可以在这里做类似的事情,而不用把开始日期和结束日期之间的每个日期都写在某个地方?我在谷歌上搜索了几个小时,没有找到任何关于如何做到这一点的信息

我试图做的是为每个循环设置一个变量。因此,对于每个日期,我将检查它是否存在于另一个工作表中,如果它不存在,则什么也不会发生,如果它不存在,则将被添加

我试过:

Dim DatesInSettings As Date
DatesInSettings = StartDate To EndDate

For Each Date In DatesInSettings
'Insert commands here
Next DatesInSetting

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

此操作将搜索
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

这将在单元格A1和B1中的
Sheet1
-上搜索
Sheet2
的开始日期和结束日期之间的日期:

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

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

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

代码:

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

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

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

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

代码:

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

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

我用一个向量解决了它

我希望有帮助

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

我用向量解了它

我希望有帮助

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

+1太棒了!我不知道有人可以用这种方式重复日期。伟大的解决方案+1太棒了!我不知道有人可以用这种方式重复日期。伟大的解决方案!