我有VBA代码,可将活动单元格中的日期递增到下一个可用列。
Dim lngLastCol As Long, lngRow As Long
lngRow = ActiveCell.Row
lngLastCol = Cells(lngRow, Columns.Count).End(xlToLeft).Column
If IsDate(Cells(lngRow, lngLastCol)) Then
With Cells(lngRow, lngLastCol + 1)
.Value = DateAdd("M", 1, CDate(Cells(lngRow, lngLastCol)))
.NumberFormat = Cells(lngRow, lngLastCol).NumberFormat
End With
End If
我不想在当前单击的活动行上增加月份(和年份),而是要更新某些固定行中的月份,即第3、17和42行(均在同一列中)。
答案 0 :(得分:2)
我不确定您想要什么,但是您可以使用下面的代码,如果需要更多调整,请告诉我。
Option Explicit
Sub test()
Dim lngLastCol As Long, lngRow As Long
lngRow = ActiveCell.Row
lngLastCol = Cells(lngRow, Columns.Count).End(xlToLeft).Column
If IsDate(Cells(lngRow, lngLastCol)) Then
With Union(Cells(3, lngLastCol + 1), Cells(17, lngLastCol + 1), Cells(42, lngLastCol + 1))
.Value = DateAdd("M", 1, CDate(Cells(lngRow, lngLastCol)))
.NumberFormat = Cells(lngRow, lngLastCol).NumberFormat
End With
End If
End Sub
答案 1 :(得分:2)
另一种方法,将一列循环到最后一行(在本例中为250)。在第二个If公式中,设置要向其添加新列的行。因此,如果此语句为Cells(i, 2).Row = 3
(当前循环为3),则添加新列。
因此,我们将活动行替换为循环:
lngRow = ActiveCell.Row
-> lngRow = Cells(i, 2).Row
For i
循环将从第3行到第250行。
Sub ColumnsAdd()
Dim lngLastCol As Long, lngRow As Long, i As Long
For i = 3 To 250 'Loop from row 3 to 250
If Cells(i, 2).Row = 3 Or Cells(i, 2).Row = 17 Or Cells(i, 2).Row = 42 Then 'If any of the rows is 3, 17 or 42 then go and add new column
lngRow = Cells(i, 2).Row
lngLastCol = Cells(lngRow, Columns.Count).End(xlToLeft).Column
If IsDate(Cells(lngRow, lngLastCol)) Then
With Cells(lngRow, lngLastCol + 1)
.Value = DateAdd("M", 1, CDate(Cells(lngRow, lngLastCol)))
.NumberFormat = Cells(lngRow, lngLastCol).NumberFormat
End With
End If
End If
Next i
End Sub