繁体   English   中英

在 VBA 中选择列范围

[英]Select columns ranges in a VBA

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

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

输出

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.
FirstDate = Cells(1, 1).Value
EndDate = Cells(1, 2).Value
Number = Cells(1, 3).Value  ' "Number" For the syntax DateAdd.

' 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

End Sub

正如我之前写的,我不仅要为前 3 个单元格运行我的宏(目前宏对于值 (1,1) (1,2) (1,3) 都可以正常工作),正如您在上面看到的 FirstDate , 结束日期和编号

我想用于 Column1、Column2、Column3 中的所有日期,例如:

我想要的输出的描述

我已经试过了:

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

但仍在转换 1 行。

如果我正确理解您需要什么,那是因为您正在调用Range("D1").Value因此它会始终更新该单元格。 您可以使用已设置的lRow变量将其放置在正确的行中,从而使其更具动态性。 用这个Cells(lRow, 4).Value = i - 1替换这个Range("D1").Value = i - 1 Cells(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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM