在VBA中选择列范围

时间:2019-08-19 16:31:32

标签: excel vba

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

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

Output

$a = import-csv backups.csv
$a | foreach { $item,$originpath,$temp = $_.item,$_.originpath,$_.temp
cp $temp/$item $originpath } 

正如我之前写的那样,我不仅要对前三个单元格运行宏(目前,宏对于值(1,1)(1,2)(1,3)都适用)上面的FirstDate,EndDate和Number

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

Description of my desired Output

我已经尝试过了:

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

但是仍在转换1行。

1 个答案:

答案 0 :(得分:1)

如果我正确理解了您的需求,那是因为您正在呼出Range("D1").Value,因此它将始终更新该单元格。您可以使用已经设置的lRow变量将其置于正确的行中,以使其更加动态。 将此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