更改列中所有单元格的值

时间:2019-12-05 15:35:53

标签: excel vba

我需要编写使用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)

我将如何调整代码以使其正常工作?

2 个答案:

答案 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