【问题标题】:Add a week to a range of dates in VBA将一周添加到 VBA 中的日期范围
【发布时间】:2017-04-20 08:21:19
【问题描述】:

在工作表 INPUT 中,输入周计划的数据行。每天多行是可能的。 A 列包含日程表原一周的日期。当在 INPUT 表中设置完整的计划(假设 15 行 x 10 列数据)时,可以运行一个宏,将计划复制到 OUTPUT 表并创建一整年。因此,我正在编写 VBA 代码以复制数据块并将其粘贴到前一周的下方,并将日期更新 7 天。

我在使用 DateAdd 函数时遇到了问题。

有没有人知道一个好的解决方案?

Dim i As Integer
Dim rowCount As Long
Dim columnCount As Long

Sheets("OUTPUT").Select
Sheets("OUTPUT").Cells.Clear
Sheets("INPUT").Select
rowCount = Sheets("INPUT").Range("A6", Sheets("INPUT").Range("A6").End(xlDown)).Rows.Count - 1
columnCount = Sheets("INPUT").Range("A5", Sheets("INPUT").Range("A5").End(xlToRight)).Columns.Count - 1
Range("A5").Select
Range(Selection, Selection.End(xlToRight)).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("OUTPUT").Select
Range("A1").Select
ActiveSheet.Paste

For i = 1 To 51

    Range("A" & Rows.Count).End(xlUp).Select
    Range(Selection, Selection.Offset(-rowCount, columnCount)).Copy
    Range("A" & Rows.Count).End(xlUp).Select
    ActiveCell.Offset(1, 0).PasteSpecial
    Range("A" & Rows.Count).End(xlUp).Select
    Range(Selection, Selection.Offset(-rowCount, 0)).Value = DateAdd("d", 7, Range(Selection, Selection.Offset(-rowCount, 0)).Value)

接下来我

【问题讨论】:

  • 我倾向于将其关闭为重复,除非您可以显示一些额外的代码来演示此问题与其他类似 Q 的不同之处,例如上面链接的一个(除了您的 Selection,这真的非常与手头的问题无关)。
  • 特别是,您可能应该在 DateAdd 函数中显示您的失败尝试。
  • @DavidZemens 这是我在这个网站的第一天,我不是一个有经验的程序员。我已经搜索并没有找到解决问题的方法。我不认为它是您提供的链接的副本,或者我的经验不足以将其转化为我的问题。你能提供帮助吗?

标签: excel offset dateadd vba


【解决方案1】:

我不完全确定你用 columnCount 做什么,所以这可能需要修改,但我认为这样的事情应该让你开始

Dim dateVals
Dim destRange as Range
Dim cl as Range
For i = 1 To 51
    ' initial data
    ' this gets a range from the last cell in column A, offset by the rowCount variable, and resized based on row/col counters
    Set rng = Range("A" & Rows.Count).End(xlUp).Offset(-rowCount).Resize(rowCount,colu‌​mnCount)
    ' similar size range beginning in row after 'rng'
    Set destRange = rng.Offset(rng.Rows.Count)

    ' Instead of copying the cells/paste special, just transfer the values directly
    ' Range(rng, rng.Offset(-rowCount, columnCount)).Copy
    destRange.Value = rng.Value

    ' Add 7 days to each cell value
    ' I assume you only have date values in column 1
    For Each cl in destRange.Columns(1).Cells
        cl.Value = DateAdd("d", 7, CDate(cl.Value))
    Next

Next i

【讨论】:

  • 完整的上下文是;在工作表 INPUT 中,输入周计划的数据行。每天多行是可能的。当在 INPUT 表中设置完整的计划(假设 15 行 x 10 列)时,可以运行一个宏,它将计划复制到 OUTPUT 表并创建一整年。我尝试了您的代码,但它只是复制最后一行。它需要将整个 15 x 10 块复制并更改 15 行的日期。我已经编辑了上面的代码以显示完整的场景。
  • 试试Set rng = Range("A" & Rows.Count).End(xlUp).Offset(-rowCount).Resize(rowCount,columnCount)
  • 当我单步执行 cl.Value = DateAdd("d", 7, cl) 时遇到类型不匹配错误“13”
  • 试试cl.Value = DateAdd("d", 7, CDate(cl.Value))
  • 我很抱歉,但仍然是同样的错误。会不会是因为日期是 dd-mmm-yyyy 格式?
【解决方案2】:
Variable= DateAdd("d", 7, Variable)

【讨论】:

    猜你喜欢
    • 2017-09-09
    • 2010-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-31
    • 1970-01-01
    • 2018-06-13
    相关资源
    最近更新 更多