Excel VBA有助于根据行中的值复制行

时间:2017-02-14 07:16:01

标签: excel vba excel-vba

我从B行开始有很多行,它们提供了项目的详细信息。

E.g。

ProjectID, END Date, Number of Hours to complete, Number of Weeks to complete 
AAA001, 15-Jan-2017, 37.5, 4 
AAB002, 15-Feb-2017, 75, 5 
AAC003, 20-Feb-2017, 37.5, 3 

我希望每一行都能多次复制到新的表格中(根据完成的周数),我希望完成的小时数除以完成的周数,我希望Date可以根据完成的周数返回几周 例如

AAA001, 18-Dec-16, 9.375, 1 
AAA001, 25-Dec-16, 9.375, 1 
AAA001, 1-Jan-17, 9.375, 1 
AAA001, 8-Jan-17, 9.375,1 
AAB002, 11-Jan-17, 15, 1 
AAB002, 18-Jan-17, 15 ,1 
AAB002, 25-Jan-17, 15 ,1 
AAB002, 1-Feb-17, 15 ,1 
AAB002, 15-Feb-17, 15, 1 
... 

等等

有没有办法在VBA中执行此操作,然后根据日期按顺序对结果表进行排序?

我担心我试图寻找解决方案而只能找到部分答案。如果有人可以评论他们提供的代码,那将对我有所帮助。

提前多多感谢。

1 个答案:

答案 0 :(得分:0)

它没有优化,但有效。我希望它能实现你的意思。 Yout输入必须位于从A列到D列的第一张纸上,您需要有第二张纸

Option Explicit
Sub test()
    Dim cnt As Integer
    Dim i As Integer, j As Integer, k As Double
    i = 2
    k = 2
    Sheets(2).Cells(1, 1).Value = Sheets(1).Cells(1, 1).Value
    Sheets(2).Cells(1, 2).Value = Sheets(1).Cells(1, 2).Value
    Sheets(2).Cells(1, 3).Value = Sheets(1).Cells(1, 3).Value
    Sheets(2).Cells(1, 4).Value = Sheets(1).Cells(1, 4).Value
    While Sheets(1).Cells(i, 1).Value <> ""
        cnt = Sheets(1).Cells(i, 4).Value
        For j = 1 To cnt
            Sheets(2).Cells(k, 1).Value = Sheets(1).Cells(i, 1).Value
            Sheets(2).Cells(k, 2).Value = Sheets(1).Cells(i, 2).Value
            Sheets(2).Cells(k, 3).Value = Sheets(1).Cells(i, 3).Value / Sheets(1).Cells(i, 4).Value
            Sheets(2).Cells(k, 4).Value = 1
            k = k + 1
        Next j
        i = i + 1
    Wend
End Sub