Variables Excel VBA将变量设置为日期之间的相等值
在使用VBA的Excel中,我需要将一个变量设置为等于开始日期和结束日期之间所有日期的列表(类似于等于包含多个值的范围)。捕获值仅为开始日期和结束日期在一个范围内,而不是介于两者之间的任何值 在SQLServer中,我使用Sys.Columns表生成了两个日期之间的日期列表,这些日期实际上并不存储在该表中。有没有一种方法可以在这里做类似的事情,而不用把开始日期和结束日期之间的每个日期都写在某个地方?我在谷歌上搜索了几个小时,没有找到任何关于如何做到这一点的信息 我试图做的是为每个循环设置一个变量。因此,对于每个日期,我将检查它是否存在于另一个工作表中,如果它不存在,则什么也不会发生,如果它不存在,则将被添加 我试过:Variables Excel VBA将变量设置为日期之间的相等值,variables,excel,vba,Variables,Excel,Vba,在使用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太棒了!我不知道有人可以用这种方式重复日期。伟大的解决方案!