【问题标题】:How to one date per row for all dates between 2 dates?如何为两个日期之间的所有日期每行一个日期?
【发布时间】:2018-09-15 11:23:20
【问题描述】:

我知道这个问题看起来很复杂,但我想做的很简单,我有 2 列:

  • 我是我的开始日期
  • L 是我的结束日期
  • G 是所有日期的位置

我想要做的是获取每个周期的天数(EndDate - StartDate + 1),添加这么多行并将 G 的值更改为每天写入。

我已经编码了下面的部分,但它似乎不正确:

Sub Dates()
Dim LastRow As Long
Dim addrows
Dim FindDates
Dim CountDays
Dim dddays
Dim ws As Worksheet
Dim ws2 As Worksheet
Dim i As Long
Dim ir As Long
Set ws = Sheets("Sheet1")
Set ws2 = Sheets("Sheet2")

With Sheets("Sheet1")
    LastRow = .Cells(.Rows.Count, "A").End(xlUp).Row - 1
End With
addrows = 2

For ir = 1 To LastRow
    FindDates = ws.Range("I" & addrows).Value
    CountDays = ws.Range("L" & addrows).Value - ws.Range("I" & addrows).Value + 1
    Adddays = 0

    For i = 1 To CountDays
        ws2.Rows("2:2").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
        ws2.Range("A2").Value = Sheets("Sheet1").Range("A" & addrows).Value
        ws2.Range("C2").Value = FindDates + Adddays
        ws2.Range("C2").Value = ws.Range("G" & addrows).Value
        Adddays = Adddays + 1
    Next i
        addrows = addrows + 1

Next ir

End Sub

文件如下所示:

你能帮帮我吗? "ws2.Range("C2").Value = FindDates + Adddays" 给我一个错误 13

【问题讨论】:

  • 拜托,你能发布一个你的数据是什么样子的例子吗?
  • FindDates 是一个数字吗?您可能应该将类型声明为 Dim FindDates as Long 之类的。
  • 你考虑过使用DataSeries吗?
  • @FoxfireAndBurnsAndBurns 我用截图更新了原始问题,你介意看一下吗?而且没听说过DataSeries,第一次用VBA,你是怎么用的?
  • 不确定这是否适合您,但请先手动尝试。我了解您有一组开始日期和结束日期。对于每个开始日期,您要插入一个带有日期的新行,直到到达结束日期。依此类推,您的数组中的所有日期都会如此。某事 LIKE THIS 。关于 DataSeries,如果需要,请手动尝试。 Read this tutorial

标签: vba excel excel-2010 excel-2007


【解决方案1】:
  • 我是我的开始日期
  • L 是我的结束日期
  • G 是所有日期的位置

我想要做的是获取每个周期的天数(EndDate - StartDate + 1),添加这么多行并将 G 的值更改为每天写入。

以上内容对您有帮助:

Sub Dates()
    Dim ir As Long, countDays As Long

    With Sheets("Sheet1")
        For ir = .Cells(.Rows.Count, "I").End(xlUp).row To 2 Step -1
            With .Rows(ir)
                countDays = .range("L1") - .range("I1") + 1
                If countDays > 1 Then
                    .Offset(1).Resize(countDays - 1).Insert xlDown
                    .Offset(1).Resize(countDays - 1).value = .value
                    With .Resize(countDays).Columns("G")
                        .FormulaR1C1 = "=RC9+ROW()-" & .Rows(1).row
                        .value = .value
                    End With
                End If                        
            End With
        Next
    End With
End Sub

【讨论】:

  • 谢谢,我不太明白这条线的作用。Offset(1).Resize(countDays - 1).value = .value
  • 它将当前行内容复制到所有新插入的行中。如果此答案解决了您的问题,您可以考虑将其标记为已接受。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-01-04
  • 2013-08-09
  • 2020-05-01
  • 2020-10-25
  • 1970-01-01
  • 1970-01-01
  • 2018-12-26
  • 1970-01-01
相关资源
最近更新 更多