根据另一列

时间:2016-11-13 21:10:25

标签: excel excel-formula

我在A-F和O-S列中有一个不断扩展的列表

    A         B            C            D         E          F
Date        Time    Date&Time       TimeB       Reading    Note
16/11/09    00:00   16/11/09 00:00  00 00:00    5.7        C
16/11/09    02:30   16/11/09 02:30  00 02:30    14.7    
16/11/09    05:00   16/11/09 05:00  00 05:00    11.2    
16/11/09    07:15   16/11/09 07:15  00 07:15    7.2 
16/11/09    09:00   16/11/09 09:00  00 09:00    5.5        A
16/11/09    11:20   16/11/09 11:20  00 11:20    10.2    
16/11/09    13:15   16/11/09 13:15  00 13:15    6.4        B
16/11/09    15:15   16/11/09 15:15  00 15:15    7.7 
16/11/09    17:00   16/11/09 17:00  00 17:00    5.4        C
16/11/09    19:20   16/11/09 19:20  00 19:20    7.9 
16/11/09    20:20   16/11/09 20:20  00 20:20    8.4 
16/11/09    22:15   16/11/09 22:15  00 22:15    7.5 
16/11/10    00:30   16/11/10 00:30  01 00:30    5.4 
16/11/10    09:23   16/11/10 09:23  00 00:08    5.4        A
16/11/10    11:50   16/11/10 11:50  00 02:35    11.1    
16/11/10    13:15   16/11/10 13:15  00 04:00    5.9        B
16/11/10    22:00   16/11/10 22:00  00 12:45    6.8 
16/11/11    06:51   16/11/11 06:51  00 21:36    4.9 
16/11/11    17:05   16/11/11 17:05  00 00:35    5.7 
16/11/11    17:30   16/11/11 17:30  00 01:00    5.9        C
16/11/11    19:00   16/11/11 19:00  00 02:30    10.6

在O到S栏中,我列出了当天的开始和停止。

Date        Time    Date&Time       Reading    Notes
16/11/09    00:00   16/11/09 00:00  5.7        Start
16/11/10    00:35   16/11/10 00:35  5.4        Stop
16/11/10    09:15   16/11/10 09:15  5.4        Start
16/11/11    07:15   16/11/11 07:15  4.9        Stop
16/11/11    16:30   16/11/11 16:30  5.7        Start
16/11/12    09:00   16/11/12 09:00  5.9        Stop
16/11/12    16:32   16/11/12 16:32  5.8        Start
16/11/13    04:45   16/11/13 04:45  6.2        Stop
16/11/13    11:11   16/11/13 11:11  4.9        Start

原来我把第一个数据表中的信息分成了一系列,用于使用命名公式绘图并使用以下X公式:

=INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-1,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-0,Sheet1!$A:$A,1),3))
=INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-2,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-1,Sheet1!$A:$A,1),3))
=INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-3,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-2,Sheet1!$A:$A,1),3))
=INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-4,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$B:$B,IFERROR(MATCH(MAX(Sheet1!$A:$A)-3,Sheet1!$A:$A,1),3))

和Y:

=INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-1,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-0,Sheet1!$A:$A,1),3))
=INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-2,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-1,Sheet1!$A:$A,1),3))
=INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-3,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-2,Sheet1!$A:$A,1),3))
=INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-4,Sheet1!$A:$A,1)+1,3)):INDEX(Sheet1!$D:$D,IFERROR(MATCH(MAX(Sheet1!$A:$A)-3,Sheet1!$A:$A,1),3))

我做了上面的30系列(仅显示前4个)来给出从输入的最大日期开始的最后30天的结果。我意识到的问题是,一些测试时间延长到第二天或超过24小时,所以我的第一种方法虽然在某些情况下有效但并不是我想要的。

我想要实现的是一种基于停止/开始列表将列表自动分解为命名公式中的单个系列的方法。

我正在使用"名称管理员"生成30个系列名称的列表。

我可以在VBA中看到这样做的方法,但我试图避免使用VBA。有关如何根据第二个表启动和停止数据自动将列表分成单独的系列图表的任何想法?

1 个答案:

答案 0 :(得分:0)

所以我会给你一个简单的版本,我相信你会处理任何并发症。

修改

Start4_time=INDEX(Sheet2!$Q$2:$Q$10, LARGE(IF(Sheet2!$S$2:$S$10="Stop", ROW(Sheet2!$S$2:$S$10)-ROW(Sheet2!$S$1), -9000000000), 4)-1)

Stop4_time=INDEX(Sheet2!$Q$2:$Q$10, LARGE(IF(Sheet2!$S$2:$S$10="Stop", ROW(Sheet2!$S$2:$S$10)-ROW(Sheet2!$S$1), -9000000000), 4)-1)

重复其他30个测试会话,并确保将参数更改为LARGE。

然后在名称管理器中定义Stop Xs和Stop Ys。

Stop4_X =INDEX(Sheet2!$D$2:$D$22, IFERROR(MATCH(Start4_time,Sheet2!$C$2:$C$22, 1)+IF(VLOOKUP(Start4_time,Sheet2!$C$2:$C$22, 1, 1)=Start4_time, 0, 1), 1)):INDEX(Sheet2!$D$2:$D$22, MATCH(Stop4_time,Sheet2!$C$2:$C$22, 1))

Stop4_Y = INDEX(Sheet2!$E$2:$E$22, IFERROR(MATCH(Start4_time,Sheet2!$C$2:$C$22, 1)+IF(VLOOKUP(Start4_time,Sheet2!$C$2:$C$22, 1, 1)=Start4_time, 0, 1), 1)):INDEX(Sheet2!$E$2:$E$22, MATCH(Stop4_time,Sheet2!$C$2:$C$22, 1))

现在您有两个已定义的Stop4_X和Stop4_Y范围,您可以将其作为图表的数据。重复你的其他人。必须进行错误检查以处理您没有足够远的数据...

另请注意,我使用Stops作为第一选择,然后使用该行-1来查找相应的Start值。那是因为我认为你不想在没有停止的情况下绘图(你的样本在列S中没有最终的停止)。如果需要,可以将设置切换为查找开始,然后使用+1查找停靠点。

我检查了dateTime列的匹配错误,其中第一个Start早于C列的第一个Entry。

一切都假设这些是C和C列中的日期时间。专栏Q。