0

我有一个看起来像这样的 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 语句之类的简单事情对我没有帮助,因为我需要列中每个组的第一次和最后一次。所以我很困惑。

对此的任何帮助将不胜感激。

4

1 回答 1

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),"")

如需工作文件示例,请查看此处

于 2012-10-18T22:44:42.247 回答