这是从雅虎财经中提取股息信息的功能。
=importdata("http://real-chart.finance.yahoo.com/table.csv?s=T&a=1&b=1&c=2010&d="&
month(today())&"&e="&DAY(today())&"&f="&year(today())&"&g=v&ignore=.csv")
这会返回......
A B
Date Dividends
42648 0.48
42557 0.48
42466 0.48
42375 0.48
42284 0.47
42193 0.47
42102 0.47
42011 0.47
41920 0.46
41828 0.46
41737 0.46
41647 0.46
41555 0.45
41463 0.45
41372 0.45
41282 0.45
41187 0.44
41096 0.44
41004 0.44
40914 0.44
40821 0.43
40730 0.43
40639 0.43
40549 0.43
40457 0.42
40366 0.42
40275 0.42
我想要做的是按每笔交易的年份进行分组。我找到了解决方法来实现这一目标。
=QUERY( A:B,
"Select year(A) , sum(B) Where A is not null Group by year(A) Label year(A) 'Year',
sum(B) 'Total'" , 1)
*结果
Year Total
2010 70.530003
2011 85.077798
2012 85.877801
2013 99.133401
2014 90.649999
2015 87.259999
2016 104.349998
虽然如果我手动将A列的单元格格式更改为日期格式,这种方法很有效,但我希望将其组合成一个函数。更像是这样的事情。
=query(importdata("http://real-chart.finance.yahoo.com/table.csv?s=T&a=00&b=3&c=2000&d="&
month(today())&"&e="&DAY(today())&"&f="&year(today())&"&g=v&ignore=.csv"),
"Select year(Col1) , sum(Col2) Where Col1 is not null Group by year(Col1)
Label year(Col1) 'Year', sum(Col2) 'Total'")
此函数给出了一条错误消息
无法在不是Date或a的列上执行功能年份 DateTime列
我想这是因为Col1是整数,而不是日期格式。
使这项工作的任何解决方法?
答案 0 :(得分:1)
使用TO_DATE内置函数将列数值转换为日期。
=ArrayFormula(query({TO_DATE(A:A),B:B},
"Select year(Col1) , sum(Col2) Where Col1 is not null Group by year(Col1) Label year(Col1)
'Year', sum(Col2) 'Total'" , 1))
=ArrayFormula(query({TO_DATE(A2:A28),B2:B28},"select year(Col1)"))
虽然这是可能的,但这需要一个非常复杂的(难以阅读和难以维护,具有重复的嵌套函数),因此脚本很可能是比单个公式更好的替代方案。