首页 > 解决方案 > 如果相邻单元格包含日期,则使用月份编号自动填充单元格

问题描述

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

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

提前谢谢了。

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

标签: excelvba

解决方案


有多种方法可以做到这一点。您可以使用Excel Formulas,Worksheet_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

推荐阅读