我正在修改我已发布的问题。我的要求非常简单。
1001 08/22/2012 12:03:34打开
1001 08/22/2012 12:03:35待定
1001 08/23/2012 02:13:46已修复
1001 08/23/2012 22:34:37 TestReady
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关闭
上述格式是我的'来源'数据。将有100个这样的缺陷。如您所见,所有上述日志日期和状态属于一个单独的Defect_ID(1001)。我的实际工作是我必须将上述数据复制到新表格中,以帮助我计算状态之间的时差。请注意,有“八种”缺陷状态:打开,待定,复查,测试准备,固定,重新测试,重新打开,关闭。这些缺陷状态可能在一个缺陷中出现多次(如上例所示,'待定'发生两次。但是开启和关闭只会发生一次)。类似地,最多可以有6次状态可以重复一个缺陷。所以我需要一个像这样的输出,其中日志日期将适合相应的状态:
请告诉我如何发布图片。如果是这样,我可以告诉你我是如何通过VBA获得输出的。请参阅我的另一个问题:'通过EXCEL VBA为eeach值创建新列,从一个匹配ID的列复制值到新表',我需要的是,我需要为每个状态添加新列重复。所以我的所有价值观都会分成一行。
答案 0 :(得分: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