我有一个Excel文件我看起来像这样:
Time 012345 2345678 5647890 7891234
6:00 1 0 0 1
6:30 1 1 0 1
7:00 1 1 0 0
7:30 0 0 0 0
8:00 0 0 1 0
8:30 0 0 1 0
9:00 0 0 1 0
9:30 0 0 1 0
10:00 0 0 0 0
10:30 1 0 0 1
11:00 1 0 0 1
11:30 1 0 0 1
12:00 1 0 0 1
12:30 0 0 0 0
13:00 0 0 0 0
13:30 0 0 1 0
14:00 0 0 1 0
14:30 0 0 1 0
15:00 0 0 1 0
15:30 1 1 0 0
等
目标是获得这些转置,但要采用时间值而不是列中的实际1和0。理想的输出看起来像这样:
userID startTime1 stopTime1 startTime2 stopTime2 startTime3 stopTime3
012345 6:00 7:30 10:00 12:30 15:00
2345678 6:00 7:30 15:00
5647890 7:30 10:00 13:00 15:30
7891234 6:00 7:00 10:00 12:30
我已经尝试过设置数据透视表并进行过滤,但这并没有让我任何地方。而且我不确定还有什么可以尝试的。 V和HLOOKUPS也没有为我做过这个技巧。
问题的一部分是,开始时间需要是高于1的一行的时间戳,停止时间需要是组中最后1行之下的时间戳1行。像if语句这样的简单事情对我没有帮助,因为我需要列中每个组中的第一次和最后一次。所以我很难过。
对此有任何帮助将不胜感激。
答案 0 :(得分:3)
根据您理想的格式,我有一些公式可以为您提供正确的结果。假设您的数据在A1:E21范围内,并且您已在G2:G5范围内复制/转置了您的用户ID。
首次开始时间公式为:
=IF(HLOOKUP($G2,$B$1:$E$2,2,1)=1,$A$2,INDEX($A$1:$A$21,MATCH(1,OFFSET($A$1:$A$21,0,MATCH($G2,$1:$1,0)-1,,),0)-1))
第一次停止时间公式(这可以复制到所有停止时间列)是:
=IFERROR(INDEX(OFFSET($A$1:$A$21,MATCH(H2,$A$1:$A$21,0),,,),1+MATCH(0,OFFSET($A$1:$A$21,MATCH(H2,$A$1:$A$21,0),MATCH($G2,$1:$1,0)-1,,),0)-1),"")
第二个开始时间公式(可以复制到所有后续开始时间列:
=IFERROR(INDEX(OFFSET($A$1:$A$21,MATCH(I2,$A$1:$A$21,0),,,),MATCH(1,OFFSET($A$1:$A$21,MATCH(I2,$A$1:$A$21,0),MATCH($G2,$1:$1,0)-1,,),0)-1),"")
对于工作文件样本,请检查here。