Excel 在VBA中选择列和范围

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=

我想为值选择一个范围(值的范围,整列):FirstDateEndDateNumber。我的VBA:

以下VBA的输出突出显示(D列):

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