【问题标题】:Select columns ranges in a VBA在 VBA 中选择列范围
【发布时间】:2019-12-24 21:46:33
【问题描述】:

我想为以下值选择一个范围(值,整列):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、EndDate 和 Number

我想用于 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().Resize() 将范围从单个单元格扩展到单元格表的函数?
  • 您是否在问如何为整个工作表运行代码,并且每一行都有一个唯一的输出?截至目前,您的FirstDateEndDateNumber 变量已设置范围(1,1),(1,2),(1,3),因此每次循环时它都会循环回这些单元格值。您需要更改函数的范围

标签: excel vba


【解决方案1】:

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

【讨论】:

  • 不错的 TheJeebo
猜你喜欢
  • 2021-05-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多