将一年添加到一系列值 – Excel VBA

我试图添加一个年份到它添加到列的任何值。 我不想粘贴到一个新的列,而是取代在同一列的值。

目前编写的代码是:

Private Sub Update_Click() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim path As String, fileName As String Dim lastRowInput As Long, lastRowOutput As Long, rowCntr As Long, lastColumn As Long Dim inputWS1 As Worksheet, outputWS As Worksheet Set inputWS1 = ThisWorkbook.Sheets("Universal") Set outputWS = ThisWorkbook.Sheets("Carriers") rowCntr = 1 lastRowInput = inputWS1.Cells(Rows.Count, "A").End(xlUp).Row lastRowOutput = outputWS.Cells(Rows.Count, "A").End(xlUp).Row lastColumn = inputWS1.Cells(1, Columns.Count).End(xlToLeft).Column inputWS1.Range("A4:A" & lastRowInput).Copy outputWS.Range("B2") inputWS1.Range("B4:B" & lastRowInput).Copy outputWS.Range("C2") outputWS.Range("E2:E" & (lastRowInput - 2)).Value = inputWS1.Name inputWS1.Range("J4:J" & lastRowInput).Copy outputWS.Range("G2") inputWS1.Range("G2:G" & lastRowInput).Value = DateAdd("yyyy", -1, CDate(inputWS1.Range("G2:G" & lastRowInput))) Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub 

我需要你们帮助我的是:

DateAdd(“yyyy”,-1,CDate(inputWS1.Range(“G2:G”&lastRowInput)))

其中inputWS1是我的工作表的名称,lastrowinput是我的variables来find列的最后一行。 当时我把这个代码已经在G2上的值,我只是想把它们转换成最后一年在同一列上的date。

请帮忙

您也可以使用评估函数一次执行计算,如下所示…

 inputWS1.Range("G2:G" & lastRowInput).Value = Evaluate("=IF(ISNUMBER(G2:G" & lastRowInput & "),DATE(YEAR(G2:G" & lastRowInput & ")-1,MONTH(G2:G" & lastRowInput & "),DAY(G2:G" & lastRowInput & ")),G2:G" & lastRowInput & ")") 

在上面的代码中join你想要在G列中减去一年的代码

你需要用dateadd函数转换单元格的具体值。

 Private Sub Update_Click() Application.ScreenUpdating = False Application.Calculation = xlCalculationManual Dim path As String, fileName As String Dim lastRowInput As Long, lastRowOutput As Long, rowCntr As Long, lastColumn As Long Dim inputWS1 As Worksheet, outputWS As Worksheet Set inputWS1 = ThisWorkbook.Sheets("Universal") Set outputWS = ThisWorkbook.Sheets("Carriers") rowCntr = 1 lastRowInput = inputWS1.Cells(Rows.Count, "A").End(xlUp).Row lastRowOutput = outputWS.Cells(Rows.Count, "A").End(xlUp).Row lastColumn = inputWS1.Cells(1, Columns.Count).End(xlToLeft).Column inputWS1.Range("A4:A" & lastRowInput).Copy outputWS.Range("B2") inputWS1.Range("B4:B" & lastRowInput).Copy outputWS.Range("C2") outputWS.Range("E2:E" & (lastRowInput - 2)).Value = inputWS1.Name inputWS1.Range("J4:J" & lastRowInput).Copy outputWS.Range("G2") 'inputWS1.Range("G2:G" & lastRowInput).Value = DateAdd("yyyy", -1, CDate(inputWS1.Range("G2:G" & lastRowInput))) Dim vDB As Variant, i As Long vDB = inputWS1.Range("G2:G" & lastRowInput) '<~~ get data to variant array vDB For i = 1 To UBound(vDB,1) vDB(i, 1) = DateAdd("yyyy", -1, CDate(vDB(i, 1))) Next i inputWS1.Range("G2:G" & lastRowInput) = vDB Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic End Sub