Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA宏,用于根据条件操作行_Excel_Vba_Date - Fatal编程技术网

Excel VBA宏,用于根据条件操作行

Excel VBA宏,用于根据条件操作行,excel,vba,date,Excel,Vba,Date,我尝试过搜索和谷歌搜索解决方案,但没有结果。 如果有我错过的解决方案,我现在道歉 (我的Excel数据库)-在运行宏之前 Start Date Start Time Number Finish Date Finish Time 14-Jul-15 22:00 1 16-Jul-15 06:00 15-Jul-15 22:00 1 17-Jul-15 06:00 15-Jul-15 22:00 1 16-Jul-15 06:00 Start

我尝试过搜索和谷歌搜索解决方案,但没有结果。 如果有我错过的解决方案,我现在道歉

(我的Excel数据库)-在运行宏之前

Start Date  Start Time  Number  Finish Date Finish Time
14-Jul-15   22:00   1   16-Jul-15   06:00
15-Jul-15   22:00   1   17-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
Start Date  Start Time  Number  Finish Date Finish Time
14-Jul-15   22:00   1   16-Jul-15   06:00
14-Jul-15   22:00   1   15-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
15-Jul-15   22:00   1   17-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
16-Jul-15   22:00   1   17-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
(我的Excel数据库)-运行宏后

Start Date  Start Time  Number  Finish Date Finish Time
14-Jul-15   22:00   1   16-Jul-15   06:00
15-Jul-15   22:00   1   17-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
Start Date  Start Time  Number  Finish Date Finish Time
14-Jul-15   22:00   1   16-Jul-15   06:00
14-Jul-15   22:00   1   15-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
15-Jul-15   22:00   1   17-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
16-Jul-15   22:00   1   17-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00
我想让宏做的是, 检查“开始日期”和“完成日期”的差值是否大于2。 如果两者之间的差值为1或0,则会转到下一行数据进行检查。 但是,如果大于0或1,则会在该特定行下添加另一行。然后复制类似的内容,但修改日期

比如说,

14-Jul-15   22:00   1   16-Jul-15   06:00
在宏之后,它将添加到原始行下

14-Jul-15   22:00   1   15-Jul-15   06:00
15-Jul-15   22:00   1   16-Jul-15   06:00

很抱歉,如果我的问题不清楚,请帮助我创建此宏。

在循环中插入行时,请始终从底部开始向上操作,否则插入新行时可能会丢失步骤顺序。通过向上移动,新插入的行假定行号已经超出循环的范围

Sub StackOverflow()
    Dim rw As Long, i As Long
    With ActiveSheet
        For rw = .Cells(Rows.Count, 1).End(xlUp).Row To 2 Step -1
            If (CDate(.Cells(rw, 4).Value2) - CDate(.Cells(rw, 1).Value2)) > 1 Then
                For i = 1 To (CDate(.Cells(rw, 4).Value2) - CDate(.Cells(rw, 1).Value2))
                    With .Cells(rw, 1).Resize(1, 5)
                        .Copy
                        .Insert Shift:=xlDown   ', copyorigin:=.Cells
                    End With
                    .Cells(rw + 1, 4) = .Cells(rw + 1, 4).Value2 - (i - 1)
                    .Cells(rw + 1, 1) = .Cells(rw + 1, 4).Value2 - 1
                Next i
            End If
        Next rw
    End With
    Application.CutCopyMode = False
End Sub

如果你的样本数据准确地代表了实际数据,那么上面应该将你的日期范围快速扩展到每一行的一天分离。

中间的是什么,你能显示什么代码来证明你自己尝试过这个?不是一个免费的代码编写服务。你好,真的很抱歉,我没有把细节写下来。对于我的代码,我不确定如何循环遍历所有行,而不是硬编码位置。你好,吉佩德,首先,非常感谢你花时间回复我。我真诚地为我违反的规则道歉(对这个网站来说还是新的,不习惯!)我已经测试了你提供的代码,它们正在工作。然而,最后一个请求!当我运行宏时,它删除了原始行。例如,如果有1到3。它添加了1到2,2到3(但是原来的1到3已经消失了。有什么想法吗?)再次感谢你如果你从7月14日到7月17日有一行,它会创建一个新的行,从7月16日到7月17日,再创建一个新的行,从7月15日到7月16日,并将原来的行更改为7月14日到7月15日。这不是你最后的示例演示的吗?啊。我想我可能没有说清楚。“在宏之后,它将添加到原始行下。”-我在上一个示例中的原始语句。我应该详细阐述一下,所以在我的最后一个例子中,我应该以7月14日-16日,7月14日-15日,7月15日-16日结束。不管怎样,你可以修改代码,让它变成这样?先生,我再次表示歉意。我相信我现在理解了最后一个例子。见上面的修订。谢谢你,吉佩德先生,这正是我想要的。祝你有愉快的一天!