Excel 根据ID将日期列拆分为开始列和结束列

Excel 根据ID将日期列拆分为开始列和结束列,excel,vba,excel-formula,Excel,Vba,Excel Formula,给定三列ID、S/E和Date(每个ID有两行),我们希望根据匹配的ID和S/E将Date列拆分为两列Start和End 我试过几种选择 方法1 到目前为止,我使用的是一个表格: 列开始: =IF([@[S/E]]="Start",[@[Date]],"") 柱端: =IF([@[S/E]]="End",[@[Date]],"") 我想在每一行显示开始和结束列下的日期。 比如: 然后添加一列,计算日期之间的

给定三列ID、S/E和Date(每个ID有两行),我们希望根据匹配的ID和S/E将Date列拆分为两列Start和End

我试过几种选择

方法1 到目前为止,我使用的是一个表格:

列开始:

=IF([@[S/E]]="Start",[@[Date]],"")
柱端:

=IF([@[S/E]]="End",[@[Date]],"")

我想在每一行显示开始和结束列下的日期。 比如:

然后添加一列,计算日期之间的差异:

Function TestDates(pDate1 As Date, pDate2 As Date) As Long
       TestDates = DateDiff("d", pDate1, pDate2)
End Function
列日期

=ABS(TestDates([@[End]],[@[Start]]))
方法2 我还尝试了以下宏

Sub ConcatenateCellsIfSameValues()
    Dim xCol As New Collection
    Dim xSrc As Variant
    Dim xRes() As Variant
    Dim I As Long
    Dim J As Long
    Dim xRg As Range
    xSrc = Range("A1", Cells(Rows.Count, "A").End(xlUp)).Resize(, 2)
    Set xRg = Range("D1")
    On Error Resume Next
    For I = 2 To UBound(xSrc)
        xCol.Add xSrc(I, 1), TypeName(xSrc(I, 1)) & CStr(xSrc(I, 1))
    Next I
    On Error GoTo 0
    ReDim xRes(1 To xCol.Count + 1, 1 To 2)
    xRes(1, 1) = "No"
    xRes(1, 2) = "Combined Date"
    For I = 1 To xCol.Count
        xRes(I + 1, 1) = xCol(I)
        For J = 2 To UBound(xSrc)
            If xSrc(J, 1) = xRes(I + 1, 1) Then
                xRes(I + 1, 2) = xRes(I + 1, 2) & ", " & xSrc(J, 2)
            End If
        Next J
        xRes(I + 1, 2) = Mid(xRes(I + 1, 2), 2)
    Next I
    Set xRg = xRg.Resize(UBound(xRes, 1), UBound(xRes, 2))
    xRg.NumberFormat = "@"
    xRg = xRes
    xRg.EntireColumn.AutoFit
End Sub
这可能是一个良好的开端,但不确定如何调整以实现这一目标

谢谢,非常感谢您的帮助! (如果宏用于表,则更好)

使用SUMIFS()

开始:

 =SUMIFS([Date],[S/E],"Start",[Trade Id],[@Trade Id])
完:

对于日期差异,不需要vba:

=INT(ABS([@End]-[@Start]))
使用SUMIFS()

开始:

 =SUMIFS([Date],[S/E],"Start",[Trade Id],[@Trade Id])
完:

对于日期差异,不需要vba:

=INT(ABS([@End]-[@Start]))

Id-S/E组合是否唯一?就像在中一样,每次开始都只有一个Id,每次结束都有一个Id?@Scott是的,这是正确的。每个ID只有一个起点和一个终点。ID-S/E组合是否唯一?就像在中一样,每次开始都只有一个Id,每次结束都有一个Id?@Scott是的,这是正确的。每个ID只有一个起点和一个终点。