如果相邻单元格包含日期,则使用月号自动填充单元格

时间:2020-03-04 09:51:36

标签: excel vba

我正在为下面的代码寻找更流畅的解决方案。任务是,如果O列不为空,则检查AH是否为空。如果AH不为空(然后它包含一个日期),则需要获取从该日期到AI列(AH旁边)的月份数。

我是编码的新手,到目前为止,以下是我所拥有的,但这似乎不是完美的解决方案,因为它只是向其中添加公式,我想这也可以通过循环来完成。 / p>

非常感谢。

Sub d_month()

Dim r As Range
Dim LastRow As Long

With Application.ActiveSheet

    LastRow = .Cells(.Rows.Count, "O").End(xlUp).Row

    For Each r In .Range("O2:O" & LastRow)
        If r.Value <> "" Then
            r.Offset(0, 20).Value = "=IF(RC[-1]="""","""",MONTH(RC[-1]))"
        End If
    Next r
End With

End Sub

1 个答案:

答案 0 :(得分:1)

有多种方法可以做到这一点。您可以使用Excel FormulasWorksheet_Change或如下所示。

很少有建议(不是一个严格的规则。仅是我个人的看法)。

  1. 使代码保持简单易懂。
  2. 除非确实重要,否则避免使用Offset。这样,您只需查看一下即可知道正在处理哪个单元格。使用偏移量,您将不得不计算并确保它是正确的单元格。
  3. 使用简单的For Loops,如下所示。

这是您要尝试的吗?

Option Explicit

Sub Sample()
    Dim ws As Worksheet
    Dim lRow As Long
    Dim i As Long

    '~~> Change this to relevant sheet
    Set ws = Sheet1

    With ws
        lRow = .Range("O" & .Rows.Count).End(xlUp).Row

        For i = 2 To lRow
            '~~> Check if O and AH are not empty
            If Len(Trim(.Range("O" & i).Value)) <> 0 And _
               Len(Trim(.Range("AH" & i).Value)) <> 0 Then
                '~~> Write to AI
                .Range("AI" & i).Value = Month(.Range("AH" & i).Value)
            End If
        Next i
    End With
End Sub
相关问题