3

这是从雅虎财经提取股息信息的功能。

=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 或 DateTime 列的列执行函数 year

我想这是因为 Col1 是整数,而不是日期格式。

任何解决方法可以使这项工作?

4

1 回答 1

1

简短的回答

使用TO_DATE内置函数将 A 列数值转换为日期。

公式

=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))

解释

简化案例

  • 以下公式假定导入的数据位于单元格 A2:B28 上。
  • TO_DATE 应用于 A 列值,然后构建一个数组用作 QUERY 的第一个参数。
=ArrayFormula(query({TO_DATE(A2:A28),B2:B28},"select year(Col1)"))

单一配方

尽管这是可能的,但这将需要一个非常复杂的(难以阅读且难以维护,具有重复的嵌套函数),很可能脚本将比单个公式更好的替代方案。

于 2016-11-07T06:15:59.103 回答