【问题标题】:Timeline - loop through all dates between first and last given and add date to column if not found时间轴 - 遍历第一个和最后一个给定日期之间的所有日期,如果未找到则将日期添加到列
【发布时间】:2016-05-02 14:08:13
【问题描述】:

我在 A、B、C 列中的内容:

日期时间名称
2016 年 1 月 3 日 8,0 约翰
2016 年 2 月 3 日 8,0 约翰
2016 年 8 月 3 日 7,5 约翰
2016 年 8 月 3 日 2,0 查尔斯
2016 年 8 月 3 日 2,0 威廉
2016 年 10 月 3 日 3,5 查尔斯
2016 年 11 月 3 日 3,7 查尔斯
2016 年 3 月 14 日 2,2 查尔斯
15/03/2016 8,0 约翰
16/03/2016 8,0 约翰

我想要在另一张表的 A、B、C 列中显示的内容:

日期时间名称
2016 年 1 月 3 日 8,0 约翰
2016 年 2 月 3 日 8,0 约翰
03/03/2016 0,0 -
04/03/2016 0,0 -
05/03/2016 0,0 -
06/03/2016 0,0 -
07/03/2016 0,0 -
2016 年 8 月 3 日 7,5 约翰
2016 年 8 月 3 日 2,0 查尔斯
2016 年 8 月 3 日 2,0 威廉
09/03/2016 0,0 -
2016 年 10 月 3 日 3,5 查尔斯
2016 年 11 月 3 日 3,7 查尔斯
2016 年 12 月 3 日 0,0 -
13/03/2016 0,0 -
2016 年 3 月 14 日 2,2 查尔斯
15/03/2016 8,0 约翰
16/03/2016 8,0 约翰

它必须适用于任何给定的日期、时间和名称!

请帮助我真的需要这个!

Sub proj0()

Dim lRow As Long

Dim Data1, Data2 As Date
Dim C1, C2 As String

Folha11.Select

    Columns("a:c").Select
    Selection.Copy

  Folha13.Select

    Range("A1").Select
    ActiveSheet.Paste

    Cells.Select
    Selection.Sort _
        Key1:=Range("a2"), Order1:=xlAscending, _
        key2:=Range("c2"), Order2:=xlAscending, _
        Header:=xlYes, OrderCustom:=1, _
        MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal

    lRow = 2

    Do While (Cells(lRow, 1) <> "")


        C1 = Cells(lRow, "c")
        C2 = Cells(lRow + 1, "c")

        Data1 = Cells(lRow, "a")
        Data2 = Cells(lRow + 1, "a")


        If (Data2 - Data1 > 1) Then
        ActiveCell.EntireRow.Insert shift:=xlDown

       Cells(lRow + 1, "a").Value = Data1 + 1
        Cells(lRow + 1, "b").Value = 0
        Cells(lRow + 1, "c").Value = "-"
           Else
            lRow = lRow + 1
        End If
    Loop
 Range("a:c").Columns.AutoFit
 Folha13.Select

我相信我很接近但无法确定插入部分

【问题讨论】:

  • 欢迎来到 Stack Overflow。 Stack Overflow 不是为我服务的代码。如果您有代码,请将其包含在您的原始帖子中。我们将帮助解决现有代码的特定问题。
  • 我不知道如何编码,我需要帮助
  • 如果没有在上面添加数据行,则向后循环测试日期是否比上面的小一。在谷歌上搜索这些关键词并尝试使用宏记录器。然后,当您有一些无法正常工作的代码时,请返回。或者你可以花钱请人去做。 www.freelancer.com
  • 我理解为下一个日期循环并添加行的概念,但我无法在 VBA excel 中对其进行编码,我是编程新手。我不知道该怎么办,已经尝试了几个星期。我很绝望,我需要专家的帮助。我在互联网或书籍中找不到类似的东西。
  • “我在互联网上找不到类似的东西...”,您尝试搜索什么? VBA 中的循环一直在完成,仅Google 就有大量信息(显然SO 也有)。你在哪里卡住了?

标签: excel loops date


【解决方案1】:

这符合您的建议:

Sub timeline()

Dim i As Long
Dim ws As Worksheet
Dim ts As Worksheet

Set ws = Sheets("Sheet15") 'Change to your Output Sheet
Set ts = Sheets("Sheet14") 'Change to your data sheet

With ws
    i = ts.Range("A" & ts.Rows.Count).End(xlUp).Row
    ts.Range("A1:C" & i).Copy .Range("A1")
    .Range("A1:C" & i).Sort Key1:=.Range("A2"), Order1:=xlAscending, _
        key2:=.Range("C2"), Order2:=xlAscending, _
        Header:=xlYes
    Do Until i = 2
        If .Cells(i, 1).Value2 = .Cells(i - 1, 1).Value2 Or .Cells(i, 1).Value2 = .Cells(i - 1, 1).Value2 + 1 Then
            i = i - 1
        Else
            .Rows(i).Insert
            .Cells(i, 1).Value = .Cells(i + 1, 1).Value2 - 1
            .Cells(i, 2).Value = 0#
            .Cells(i, 3).Value = "--"
        End If
    Loop
End With

End Sub

Sheet14 之前:

Sheet15 之后:

【讨论】:

  • Scott Craner,我在 if 行中有错误。我的办公室是葡萄牙语的,我不知道是不是这个原因。我在 Set 部分进行了一些更改以匹配我的床单,但不知道这是否是原因。我正在调查它。有什么办法可以让 Excel 可供下载?
  • 成功了,非常感谢!我的错,我切换了 2 个工作表名称,这是错误的原因!
  • @carlos_cs 对羟基苯甲酸酯! Esto feliz que es facendo。
猜你喜欢
  • 1970-01-01
  • 2011-09-27
  • 2016-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多