我正在为下面的代码寻找更流畅的解决方案。任务是,如果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
答案 0 :(得分:1)
有多种方法可以做到这一点。您可以使用Excel Formulas
,Worksheet_Change
或如下所示。
很少有建议(不是一个严格的规则。仅是我个人的看法)。
Offset
。这样,您只需查看一下即可知道正在处理哪个单元格。使用偏移量,您将不得不计算并确保它是正确的单元格。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