1

我有一个包含三张纸的电子表格。两个被调用2012并且2011有一堆相似的数据。最后一张表对数据进行比较。

为了能够选择年份,我使用了一个单元格 (D1),我可以在其中写20112012。然后,公式使用 INDIRECT 函数将此单元格作为参考的一部分。

INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!F:F")

这不是一个很好的解决方案,并且使公式变得非常冗长和复杂。

=IFERROR(SUM(FILTER( INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!M:M") ;  (INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A4)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A5)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A6)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A7)+(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B")=$A8); MONTH(INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!D:D"))=$B$1 ; INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!F:F")=D$3));0)

有没有更好的方法来做到这一点?

我尝试为计算表创建一个单独的电子表格,并使用 VMERGE(脚本库中的自定义函数)将两张表中的数据一起导入(IMPORTRANGE)一张表中,但这两张表中有很多数据表和导入需要很长时间。任何更改(例如更改年份)也需要很长时间才能重新计算。

4

2 回答 2

0

做这种事情时,数据库函数往往更干净。

https://support.google.com/docs/bin/static.py?hl=en&topic=25273&page=table.cs&tab=1368827

数据库函数需要一段时间来学习,但它们很强大。

或者

您可以将 INDIRECT(CHAR(39)&$D$1&CHAR(39)&"!B:B") 单独放在一个单元格中。

于 2012-06-18T05:13:50.627 回答
0

我认为您有两年的架构相同的信息(C 列在两张纸上具有相同类型的信息)。另外,我假设 B 列跟踪年份。

如果是这样,请考虑将所有信息保存在一张纸上,并使用电子表格功能“QUERY”创建视图。

例如,此公式从名为“DataSheet”的工作表中返回 A1:E 之间的所有单元格,其中 B 列中的值 = 2010。

=QUERY(DataSheet!A1:E;"SELECT * WHERE B = 2010";1)

有时有一个很好的理由将数据存储在两张纸上。如果是这样,请使用脚本库中的 vMerge 函数之一来组装工作表。然后从工作表创建视图和报告。

function VMerge() {
  var maxw=l=0;
  var minw=Number.MAX_VALUE;
  var al=arguments.length ;
  for( i=0 ; i<al ; i++){
    if( arguments[i].constructor == Array )l =arguments[i][0].length ;
    else if (arguments[i].length!=0) l = 1 ;  // literal values count as array with a width of one cell, empty cells are ignored!
    maxw=l>maxw?l:maxw;
    minw=l<minw?l:minw;
  }
  if( maxw==minw) { /* when largest width equals smallest width all are equal */
    var s = new Array();
    for( i=0 ; i<al ; i++){
      if( arguments[i].constructor == Array ) s = s.concat( arguments[i].slice() )
      else if (arguments[i].length!=0) s = s.concat( [[arguments[i]]] )  
    }
  if ( s.length == 0 ) return null ; else return s        //s     
  }
  else return "#N/A: All data ranges must be of equal width!"      
}

希望这可以帮助。

于 2012-06-18T21:38:02.943 回答