我需要编写使用VBA在Excel文件中重新格式化文本消息的代码。一栏列出了每个文本的发送/接收日期。我需要将此列更改为改为“第一天”,“第二天”。因此,例如,19/3/19将是“第一天” 11/3/19将是“第一天” 11/4/19将是“第二天” 11/6/19将是“第四天” >
为此,我想将每个日期减去第一个日期并加1。我可以针对每个单元格执行此操作:
Sub Days()
Range("M2").Value = "Day " + CStr(Range("E2").Value - Range("E2").Value + 1)
Range("M3").Value = "Day " + CStr(Range("E3").Value - Range("E2").Value + 1)
Range("M4").Value = "Day " + CStr(Range("E4").Value - Range("E2").Value + 1)
End Sub
我希望对E列中的每个单元格进行此操作。这是我的尝试:
Sub Days()
Columns("M:M").Value = "Day " + CStr(Columns("E:E").Value - Range("E2").Value + 1)
(End Sub)
我将如何调整代码以使其正常工作?
答案 0 :(得分:1)
如果您真的希望将此作为VBA,则这是一种解决方案,可以利用注释中已经提供的公式:
Sub Days()
With ActiveSheet
Dim lastRow As Long
lastRow = .Cells(.Rows.Count, "E").End(xlUp).Row
.Range("M2:M" & lastRow).Formula = "=""Day "" & E2 - $E$2 + 1"
.Range("M2:M" & lastRow).Value = .Range("M2:M" & lastRow).Value
End With
End Sub
答案 1 :(得分:1)
不填写完整的专栏。在E列中找到包含数据的最后一个单元格,然后使用Evaluate:
Sub Days()
With Worksheets("Sheet2")
Dim lstRow As Long
lstRow = .Cells(.Rows.Count, 5).End(xlUp).Row
.Range("M2:M" & lstRow) = .Evaluate("INDEX(""Day "" & E2:E" & lstRow & " - E2 + 1,)")
End With
End Sub