将查询结果填充到另一工作表
例题描述和简单分析
某excel文件中,sheet2是数据待查片区,其中A列是起始时间,B列是截至时间,且每行的时间段均不重复。部分数据如下:
![]() |
A | B | C | D | E | F |
1 | this is a title | |||||
2 | date period | 2wk HH | WPH | WCP | WPL | |
3 | 2018/7/10 | 2018/7/14 | 0.7839 | 0.7729 | 0.772 | 0.7655 |
4 | 2018/7/17 | 2018/7/21 | 0.799 | 0.794 | 0.7909 | 0.7599 |
5 | 2018/7/24 | 2018/7/28 | 0.8069 | 0.8007 | 0.7911 | 0.7783 |
现在要输入日期参数,从上述片区找到符合条件的一行数据,取其中的C-F列,由行转列,并填入shee1的C2:C5。假如输入2018/7/18,则sheet1应当如下:
![]() |
A | B | C |
1 | result below | ||
2 | 2wk HH | 0.799 | |
3 | WPH | 0.794 | |
4 | WCP | 0.7909 | |
5 | WPL | 0.7599 |
上述算法涉及序列查询和单条记录的转置。
解法及简要说明
从Excel sheet2的第3行开始往下复制数据,并粘贴到集算器脚本的A1格,之后编写如下脚本:
![]() |
A |
1 | …(复制来的数据 ) |
2 | =A1.split@np("\t") |
3 | =A2.select@1(pDate>~(1) && pDate<=~(2)) |
4 | =A3.to(3,) |
A2:将字符串解析为序列的序列,@p表示自动解析数据类型,这里是为了解析日期。
A3:按时间段查询序列。pDate是网格参数,比如2018/7/18。注意日期格式应和Excel一致,设置为yyyy/mm/dd。
A4:从第3个成员开始,取该序列余下的成员。
执行上述脚本后,将A4复制到Excel shee1的C2单元格,即可完成计算。
英文版
英文已更新