使用间接来维护另一个工作表中的年初至今

时间:2015-06-18 16:39:36

标签: excel date excel-indirect

第一次发表海报。我试图将早期日期工作表中的单元格求和,以便保持年初至今的比较计数。现在我的工作簿设置方式,我在每个工作表上有一年的数据,使用的数据是月度报告。月度报告会粘贴到我的“模板”中。工作表。然后将来自这些数据的数据组织成单独工作表上的时间序列,每个工作表的名称是数据对应的年份。在整个一年中添加新数据时,我想要提取上一年的年度总数,以便比较相似的时间范围。这就是我的公式目前的样子。

=SUM(INDIRECT("'"&LEFT($A13,4)&"'!C17:OFFSET(C$16,MONTH(RIGHT(Template!C$3,10)))"))

LEFT($A13,4)引用我想要当前工作表的年份,MONTH(RIGHT(Template!C$3,10))标识当前报告的月份数。因此,对于2015年5月,Left($A13, 4)将返回"2014",而MONTH(RIGHT(Template!C$3,10))将返回5的值。

正如(我希望)很明显,我试图在上一年工作表的年度系列开头尝试开始我的总结,然后使用OFFSET拉入只有今年当前报告月结束的月份才能进行年初至今的变更。当我尝试执行此操作时,这将在Excel中返回#REF!。第一印象似乎是INDIRECT无法将OFFSET视为一种功能,并将其视为文本。有没有办法解决这个问题?

我看到之前发布的类似内容,但无法转换为我的情况。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:0)

如果没有数据,很难复制,所以请把它当作值得的......

打破你的公式(每行一个不同的参数),我们有

=SUM(
  INDIRECT(
    "'"
    &
    LEFT($A13,4)
    &
    "'!C17:OFFSET(C$16,MONTH(RIGHT(Template!C$3,10)))"
  )
)

意味着以"'!C17:OFFSET(...开头的行可能被Excel视为文本,因为它包含在引号内。你可能想要

=SUM(
  INDIRECT(
    "'"
    &
    LEFT($A13,4)
    &
    "'!"
    &
    C17
    &
    ":"
    &
    OFFSET(C$16,MONTH(RIGHT(Template!C$3,10)))
  )
)

为了将所有语法('!:等)作为字符串提供给INDIRECT,将所有单元格值作为公式结果提供。< / p>

答案 1 :(得分:0)

感谢您抽出宝贵时间回答我的问题。我想我找到了比我之前想象的更可行的解决方案。我没有将年度工作表只包含一年的数据,而是在一个新工作表的末尾添加了报告,并将整个时间序列添加到标题为“原始数据”的工作表中,其中包含“A”列包含月末日期的新工作表。这就是我的公式,用于将新报告添加到“原始数据”表。

=IF(AND(YEAR($A2)=YEAR(Template!$F$4), MONTH('Raw Data'!$A2)=MONTH(Template!$F$4)),Template!C$35," ")

Template!$F$4引用了报告中的日期。

我的年度工作表然后引用“原始数据”表,以消除使用INDIRECT函数的需要。为了维护“原始数据”列“C”中找到的数据的年初至今,这是我的公式。

=SUM(INDEX('Raw Data'!C:C,(MATCH(EOMONTH($A17,-12),'Raw Data'!$A:$A,0))):OFFSET(INDEX('Raw Data'!C:C,(MATCH(EOMONTH($A17,-13),'Raw Data'!$A:$A,0))),MONTH(RIGHT(Template!$F$4,10)),0))

EOMONTH($A17, -12)设置为始终引用上一年的1月。然后,OFFSETMONTH(RIGHT(Template!$F$4,10))引用的报告中找到的月份数加var url = 'http://www.reddit.com/r/nsfw/'; var request = require('request'); request = request.defaults({jar: true }); request.post({ followAllRedirects: true, url: 'http://www.reddit.com/over18?dest=' + encodeURIComponent(url), form: {uh: '', over18: 'yes', } }, function(err, httpResponse, html) { … });