Excel 在VBA中选择列和范围
我想为值选择一个范围(值的范围,整列):FirstDate、EndDate和Number。我的VBA: 以下VBA的输出突出显示(D列):Excel 在VBA中选择列和范围,excel,vba,Excel,Vba,我想为值选择一个范围(值的范围,整列):FirstDate、EndDate和Number。我的VBA: 以下VBA的输出突出显示(D列): Sub-DateTest() Dim FirstDate作为日期声明变量。 作为字符串的Dim IntervalType 整数形式的数字 Dim EndDate作为日期 日期为日期 作为整数的Dim i IntervalType=“m”'“m”指定月份作为间隔。 FirstDate=单元格(1,1).值 EndDate=单元格(1,2).值 Number=
Sub-DateTest()
Dim FirstDate作为日期声明变量。
作为字符串的Dim IntervalType
整数形式的数字
Dim EndDate作为日期
日期为日期
作为整数的Dim i
IntervalType=“m”'“m”指定月份作为间隔。
FirstDate=单元格(1,1).值
EndDate=单元格(1,2).值
Number=单元格(1,3)。语法DateAdd的值为“Number”。
'如果数字不大于零,将发生无限循环。
如果数字如果我正确理解你需要什么,那是因为你调用的是范围(“D1”)。值
,所以它将始终更新该单元格。通过使用已设置的lRow
变量将其放置到正确的行中,可以使其更具动态性。
将此范围(“D1”).Value=i-1
替换为此单元格(lRow,4)。Value=i-1
Sub DateTest()
Dim FirstDate As Date ' Declare variables.
Dim IntervalType As String
Dim Number As Integer
Dim EndDate As Date
Dim TempDate As Date
Dim i As Integer
IntervalType = "m" ' "m" specifies MONTHS as interval.
With ActiveWorkbook.Worksheets(1)
lLastRow = .UsedRange.Rows.Count
For lRow = 1 To lLastRow
FirstDate = Format(.Cells(lRow, 1).Value, "YYYY-MM-DD")
EndDate = Format(.Cells(lRow, 2).Value, "YYYY-MM-DD")
Number = .Cells(lRow, 3).Value
' If the number is not greater than zero an infinite loop will happen.
If Number <= 0 Then
MsgBox "Number needs to be greater than 0", vbCritical
Exit Sub
End If
i = 1
Do Until TempDate = EndDate
If i <= 1 Then
TempDate = DateAdd(IntervalType, Number, FirstDate)
Else
TempDate = DateAdd(IntervalType, Number, TempDate)
End If
i = i + 1
Debug.Print i
Loop
Cells(lRow, 4).Value = i - 1
'Range("D1").Value = i - 1
Next
End With
End Sub
Sub-DateTest()
Dim FirstDate作为日期声明变量。
作为字符串的Dim IntervalType
整数形式的数字
Dim EndDate作为日期
日期为日期
作为整数的Dim i
IntervalType=“m”'“m”指定月份作为间隔。
使用Active工作簿。工作表(1)
lLastRow=.UsedRange.Rows.Count
对于lRow=1至lLastRow
FirstDate=格式(.Cells(lRow,1).值,“YYYY-MM-DD”)
EndDate=格式(.Cells(lRow,2).值,“YYYY-MM-DD”)
Number=.Cells(lRow,3).Value
'如果数字不大于零,将发生无限循环。
If Number您是否尝试过将范围从单个单元格扩展到单元格表的Range().Resize()
函数?您是否在询问如何为整个工作表运行代码,每行都有唯一的输出?现在,您的FirstDate
、EndDate
和Number
变量都设置了范围(1,1)、(1,2)、(1,3)
,因此每次循环时它都会循环回这些单元格值。你需要改变你的功能范围好的一个Jeebo
Sub DateTest()
Dim FirstDate As Date ' Declare variables.
Dim IntervalType As String
Dim Number As Integer
Dim EndDate As Date
Dim TempDate As Date
Dim i As Integer
IntervalType = "m" ' "m" specifies MONTHS as interval.
With ActiveWorkbook.Worksheets(1)
lLastRow = .UsedRange.Rows.Count
For lRow = 1 To lLastRow
FirstDate = Format(.Cells(lRow, 1).Value, "YYYY-MM-DD")
EndDate = Format(.Cells(lRow, 2).Value, "YYYY-MM-DD")
Number = .Cells(lRow, 3).Value
' If the number is not greater than zero an infinite loop will happen.
If Number <= 0 Then
MsgBox "Number needs to be greater than 0", vbCritical
Exit Sub
End If
i = 1
Do Until TempDate = EndDate
If i <= 1 Then
TempDate = DateAdd(IntervalType, Number, FirstDate)
Else
TempDate = DateAdd(IntervalType, Number, TempDate)
End If
i = i + 1
Debug.Print i
Loop
Range("D1").Value = i - 1
Next
End With
End Sub
Sub DateTest()
Dim FirstDate As Date ' Declare variables.
Dim IntervalType As String
Dim Number As Integer
Dim EndDate As Date
Dim TempDate As Date
Dim i As Integer
IntervalType = "m" ' "m" specifies MONTHS as interval.
With ActiveWorkbook.Worksheets(1)
lLastRow = .UsedRange.Rows.Count
For lRow = 1 To lLastRow
FirstDate = Format(.Cells(lRow, 1).Value, "YYYY-MM-DD")
EndDate = Format(.Cells(lRow, 2).Value, "YYYY-MM-DD")
Number = .Cells(lRow, 3).Value
' If the number is not greater than zero an infinite loop will happen.
If Number <= 0 Then
MsgBox "Number needs to be greater than 0", vbCritical
Exit Sub
End If
i = 1
Do Until TempDate = EndDate
If i <= 1 Then
TempDate = DateAdd(IntervalType, Number, FirstDate)
Else
TempDate = DateAdd(IntervalType, Number, TempDate)
End If
i = i + 1
Debug.Print i
Loop
Cells(lRow, 4).Value = i - 1
'Range("D1").Value = i - 1
Next
End With
End Sub