-2

我正在修改我已经发布的问题。我的要求很简单。

DEFECT_ID LOG_TIME 状态

1001 08/22/2012 12:03:34 打开

1001 08/22/2012 12:03:35 待定

1001 2012 年 8 月 23 日 02:13:46 固定

1001 2012 年 8 月 23 日 22:34:37 测试就绪

1001 08/24/2012 12:34:43 待定

1001 08/24/2012 19:13:39 复试

1001 08/25/2012 22:13:40 重新开放

1001 08/26/2012 10:03:41 重新测试

1001 08/27/2012 11:13:42 关闭

上述格式是我的“源”数据。会有数百个这样的缺陷。如您所见,上述所有日志日期和状态都属于一个 Defect_ID(1001)。我的实际工作是我必须将上述数据复制到一张新表格中,格式可以帮助我计算状态之间的时间差。请注意,有“八”种缺陷状态:Open、Pending、Review、TestReady、Fixed、Retest、Reopen、Closed。这些缺陷状态可以在一个缺陷中出现多次(如上例所示,' Pending' 出现两次。但 open 和 closed 只会出现一次)。同样,对于缺陷,状态最多可以重复 6 次。所以我需要这样的输出,其中日志日期将适合相应的状态:

*Defect_ID* 打开 Pending1 Pending2...Pending6 Fixed1...Fixed6 TestReady1..Testready6 Review1..Review6 Retest1..Retest6 REopen1..REopen6 Closed

请让我知道如何发布图片。如果是这样,我可以向您展示我究竟需要如何通过 VBA 输出。请参考我的另一个问题:'通过 EXCEL VBA 为每个值创建新列,将与 ID 匹配的列中的值复制到新工作表',我所需要的就是,我需要为每个状态添加新列重复。这样我所有的值都将放在一行中。

4

1 回答 1

0

这是一些 VBA,可以满足您的需求。(如果我正确理解要求)。它可能有点冗长,但应该易于维护。可能有一种更雄辩的方式来做到这一点。

Private Sub CreateOutputSheet()

   Dim iLoop, iStartRow, iEndRow As Integer

   Dim iPendingCount As Integer
   Dim iFixedCount   As Integer

   'Base Col Numbers
   Const colPending     As Integer = 3
   Const colColFixed    As Integer = 9
   '.....

   Dim sDefectIdCurrent    As String
   Dim sDefectIdPrevious   As String

   Dim iTargetRow As Integer
   Dim sCurrentStatus As String
   Dim dCurrentTime As Date

   sDefectIdPrevious = Sheets("Soure").Cells(intstartRow, 1)
   sDefectIdCurrent = Sheets("Soure").Cells(intstartRow, 1)

   For iLoop = iStartRow To iEndRow
      sDefectIdCurrent = Sheets("Soure").Cells(iLoop, 1)
      'Check the current problem
      If sDefectIdCurrent <> sDefectIdPrevious Then 'Reset the col counters
         iPendingCount = 0
         iFixedCount = 0
         '....
      End If

      sCurrentStatus = Sheets("Soure").Cells(iLoop, 3)
      dCurrentTime = Sheets("Soure").Cells(iLoop, 2)

      Select Case sCurrentStatus

         Case "Open"
            Sheets("Target").Cells(iTargetRow, 2) = dCurrentTime
         Case "Pending"
            iPendingCount = iPendingCount + 1
            Sheets("Target").Cells(colPending + iPendingCount, 1) = dCurrentTime
         Case "Fixed"
            iFixedCount = iFixedCount + 1
            Sheets("Target").Cells(colColFixed + iFixedCount, 1) = dCurrentTime
         '...
         Case "Closed"
            Sheets("Target").Cells(iTargetRow, colClosedNo) = dCurrentTime
      End Select

      sDefectIdCurrent = Sheets("Soure").Cells(intstartRow, 1)
   Next

End Sub
于 2012-09-01T08:00:13.573 回答