excel - 如果相邻单元格包含日期,则使用月份编号自动填充单元格
问题描述
我正在为以下代码寻找更流畅的解决方案。任务是如果 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
解决方案
有多种方法可以做到这一点。您可以使用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
推荐阅读
- docker - 如何在 docker compose 中自动运行和删除容器
- javascript - 如何切换我的玩家变量以在玩家一和玩家二之间切换?
- c# - C#- 将列从 Excel 拉到复选框列表
- python - http 输出中 json 中某个键的缺失值的默认值
- javascript - 预期数字,但返回字符串
- javascript - 如何从jquery中的json中删除空数组
- node.js - 如何显示自定义快速验证器错误消息
- python - 将熊猫数据框转换为转置表格格式
- c# - Entity Framework Core FromSql 模拟测试用例
- javascript - 如何从 HTML 源代码限制编辑 HTML 按钮的“禁用”属性