![](/img/trans.png)
[英]application.worksheetfunction.vlookup in vba does not loop
[英]VBA How to add a loop with Application.WorksheetFunction.?
您能否建議如何在所有填充的行中循環我的代碼(基於 D 行)? 我需要從 ad2 中減去 d2,從 ad3 中減去 d3 等等,然后將結果放在 ae 列中(我猜是偏移量)。
理想情況下,避免在 ae 中輸入公式,而是使用Application.WorksheetFunction.Value=Total
?
Sub valuedifference()
Dim Total As Double
Dim TimeX As Date
Dim TimeY As Date
With ThisWorkbook.Sheets("Test1")
TimeX = CDate(Range("d2").Value)
TimeY = CDate(Range("ad2").Value)
Total = TimeValue(TimeY) - TimeValue(TimeX)
Range("ag2").Value = Abs(Total * 24)
Range("ah2").Value = Abs(Total * 1440)
End With
End Sub
下面的宏使用 D 列查找最后一行,然后循環遍歷每一行並將結果放在 AE 列中...
Sub valuedifference()
Dim Total As Double
Dim TimeX As Date
Dim TimeY As Date
Dim LastRow As Long
Dim i As Long
With ThisWorkbook.Sheets("Test1")
LastRow = .Cells(.Rows.Count, "d").End(xlUp).Row
For i = 2 To LastRow
TimeX = CDate(.Range("d" & i).Value)
TimeY = CDate(.Range("ad" & i).Value)
Total = DateDiff("n", TimeY, TimeX)
.Range("AE" & i).Value = Total
.Range("AG" & i).Value = Format(Abs(Total), "#.##")
.Range("AH" & i).Value = Format(Abs(Total), "#.##")
Next i
End With
End Sub
我強烈建議使用Range
變量和偏移量,而不是組裝單元格名稱引用。
由於回寫電子表格是一個包含 3 個單元格的塊,因此您可以使用寫入塊的所需值的Array
來減少電子表格更新。
對我來說,一個懸而未決的問題是你是否也想捕捉天數的差異,或者只是像你在這里所做的那樣捕捉時間差異(無論日期如何)?
Sub valuedifference()
Dim Total As Double
Dim TimeX As Date
Dim TimeY As Date
Dim LastD As Range
Dim DRange As Range
Dim ACell As Range
Set LastD = Sheets("Test1").Cells(Sheets("Test1").Cells.Rows.Count, 4).End(xlUp)
Set DRange = Range(Sheets("Test1").Range("D2"), LastD)
For Each ACell In DRange
TimeX = CDate(ACell.Value) ' from D column
TimeY = CDate(ACell.Offset(0, 26).Value) ' from AD column
Total = TimeValue(TimeY) - TimeValue(TimeX)
' Place results in AE rightward cells
ACell.Offset(0, 27).Resize(1, 3).Value _
= Array(Total, Abs(Total * 24), Abs(Total * 1440))
Next ACell
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.