Excel 根据ID将日期列拆分为开始列和结束列
给定三列ID、S/E和Date(每个ID有两行),我们希望根据匹配的ID和S/E将Date列拆分为两列Start和End 我试过几种选择 方法1 到目前为止,我使用的是一个表格: 列开始: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]],"") 我想在每一行显示开始和结束列下的日期。 比如: 然后添加一列,计算日期之间的
=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只有一个起点和一个终点。