下一个可用列中的月份增加,但多行

时间:2018-11-01 11:02:31

标签: excel vba

我有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行(均在同一列中)。

2 个答案:

答案 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